Я рассказывал о замечательном модуле Metatag для Drupal 7. Задачу с выводом мета-описаний он решает на все 100%. У меня была проблема с не выводом мета-тегов для главной страницы при работе с ним.
Вывод удалось восстановить, подключив рендеринг метатегов прямо в шаблон page—front.tpl.php.
1 |
<?php render($page['content']['metatags']); ?> |
Когда то давно из шаблона главной выпала строка :
1 |
<?php print render($page['content']); ?> |
а вместе с ней и вывод мета-тегов.
Хоть шаблон страницы и не содержит html секции head, но в случае метатегов render не возвращает каких либо данных для непосредственного вывода в шаблон. Она изменяет общие заголовки шаблона, добавляя к нему мета-описания.
До этого я пользовался вот таким костылем, который вписывал прямо в секцию <head> в шаблоне html.tpl.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php //выводим вручную METATAGs для главной if (drupal_is_front_page()) { $path = variable_get('site_frontpage'); if ($nid = myLib::extractNid($path)) { $node = node_load($nid); if (!empty($node->metatags['ru']['title']['value'])) { $head_title = $node->metatags['ru']['title']['value']; unset($node->metatags['ru']['title']); } foreach ($node->metatags['ru'] as $k => $v) print '<meta name="' . $k . '" content="' . htmlspecialchars($v['value']) . '" />'; } } ?> |
В коде проверяется настройка друпала — site_frontpage (адрес главной страницы), и если этот адрес соответствует адресу какой то ноды, то мы грузим данные публикации, переписываем заголовок и выводим мета-описания.
В коде используется функция из сборника моих друпаловских хелперов, привожу её код.
1 2 3 4 5 6 7 8 |
/* сборник прочих функций */ class myLib { static function extractNid($path = NULL) { if ($path == NULL) $path = $_GET['q']; if (preg_match('#^node/([\d]+)$#ism', $path, $m)) return $m[1]; return false; } } |
Костыль реализует не универсальный, частный случай. Тем не менее для русских сайтов, вывода только базовых мета-переменных — он подходит. А это у меня почти 100% проектов.
Теперь когда я разобрался с проблемой, то и в костыле смысла нет :).
Теги из ноды, используемой как front-page, модуль не подставляет. Он загружает только глобальные описания для главной. Об этом приходится помнить.