Пытаюсь подружить Друпал с метаразметкой 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, но это уже в будущем.
На самом деле не уверен, что всё делаю верно. В сети нет ни одного внятного рабочего примера.