Вы здесь

Метаразметка RDF и Drupal

Пытаюсь подружить Друпал с метаразметкой RDFa. Прописал нэймспэйсы и доктайп, предварительно адаптировав под него ресурс.

Вот что у меня получилось на сегодня...

Анонсы материалов и метданные в друпал

Здесь всё довольно просто оказалось. Идём в шаблоны page.tpl.php и node.tpl.php. В первом ищем опорный блок для контента и биндим ему нэймспэйс дублинского ядра:

<div id="content-core" class="content-left" xmlns:dc="http://purl.org/dc/elements/1.1/">

Дальше присваиваем заголовку свойство dc:title:

<?php if ($title): ?>  <h2 property="dc:title">  <?php print $title; ?>  </h2>  <?php endif; ?>

В node.tpl.php аналогично присваиваем заголовку dc:title и выделяем дату публикации:

<?php print '<h2 property="dc:title"><a title="Читать полностью '.$title.'" href="'.$node_url.'" class="article-title" rel="article">'.$title.'</a> <span class="submitted">'.$date.'</span></h2>'; ?><?php endif; ?>

Возможно не совсем верно, что я завернул дату в заголовок, но думаю не страшно.

Дальше в этом же шаблоне ищем вывод автора, заключаем в span и приписываем контейнеру свойство dc:creator. Примерно так:

<div class="metainfo">  <span class="author">Автор:  <span property="dc:creator"><?php print $name; ?></span>  </span>  </div>

Я на будущее сделал отдельный блок, планирую сюда вывести другие данные.

Комментарии и метданные в друпал

Здесь сложнее. Для оформления данных комментаторов в RDFa нам потребуется переопределить ядерную функцию вывода имени комментатора и ссылки на его домашнюю страничку.

В директории темы в файле template.php создаём функцию:

function phptemplate_username($object) {  if ($object->uid && $object->name) {  if (drupal_strlen($object->name) > 20) {  $name = drupal_substr($object->name, 0, 15) .'...';  }  else {  $name = $object->name;  }  if (user_access('access user profiles')) {  $output = l($name, 'user/'. $object->uid, array('attributes' => array('title' => t('View user profile.'))));  }  else {  $output = check_plain($name);  }  }  else if ($object->name) {  if (!empty($object->homepage)) {  $homefoaf = 'сайт';  $output = '<span class="meta comment-author" property="foaf:name">'.$object->name.'</span> → <span class="meta homepage">' . l($homefoaf, $object->homepage, array('attributes' => array('rel' => 'foaf:homepage', 'about' => '[_:'.$object->name.']', 'title' => 'домашняя страничка '.$object->name,))).'</span>';  }  else {  $output = check_plain($object->name);  }  }  else {  $output = check_plain(variable_get('anonymous', t('Anonymous')));  }  return $output;  }

Здесь, в куске кода:

else if ($object->name) {  if (!empty($object->homepage)) {  $homefoaf = 'сайт';  $output = '<span class="meta comment-author" property="foaf:name">'.$object->name.'</span> → <span class="meta homepage">' . l($homefoaf, $object->homepage, array('attributes' => array('rel' => 'foaf:homepage', 'about' => '[_:'.$object->name.']', 'title' => 'домашняя страничка '.$object->name,))).'</span>';  }

Тут всё ясно. Разбили имя и сайт в разные span'ы, установили ля них свойства «Friend of a Friend» или FOAF.

Поскольку я использую для темизации комментариев модуль Advanced Forum, то в шаблоне advf-author-pane.tpl.php, я выделил опорный блок и присвоил ему адресное пространство словаря FOAF и соответствующие аттрибуты:

<div class="author-pane-name-status author-pane-section" typeof="foaf:Person" xmlns:foaf="http://xmlns.com/foaf/0.1/">

Не решился устанавливать на вывод аватарки свойства фотографии, но думаю реализую это, когда прикручу Gravatar. Еще нужно кастомизировать профили пользователей и приделать Open Login, но это уже в будущем.

На самом деле не уверен, что всё делаю верно. В сети нет ни одного внятного рабочего примера.

Автора автора