Произвольный <meta>-теги и другие теги в <head>-области HTML страницы
Прислано: andyceo
чт, 06/12/2007 - 14:35
Приветствую, дамы и господа, друпаллерши и друпаллеры!
Искал-искал, искал-искал, ИСКАЛ-ИСКАЛ по разным сайтам и всему интернету, но не нашёл ответ на следующий вопрос.
Какой модуль Друпала позволяет формировать произвольные мета-теги в head-части HTML-страницы? Т.е.:
<html> <head> <title>Тестовая страница</title> <meta name="robots" content="index,follow" /> <meta name="verify-v1" content="ApEbWaOK3CfB1B0vwz1aXiPM4AyF25WXJcivNFmEKtQ=" /> <meta name="ПРОИЗВОЛЬНАЯ МЕТА" content="ПРОИЗВОЛЬНЫЙ КОНТЕНТ МЕТЫ"> </head> <body> ВСЯКАЯ ВСЯЧИНА </body> </html>
Все мы знаем про модуль MetaTags-который-сейчас-NodeWords, но это не совсем то что нам надо.
Здесь на форуме нашёл некоторое решение, оно с использованием CCK и с написанием своего небольшого модуля. А вот здесь один несчастный ещё в 2005 году интересовался подобным вопросом, но ему никто не ответил.
Эта задача встречается очень часто. Например, Центр веб-мастеров Google просит ввести в страницу мету, чтобы подтердить вашу собственность на сайт (или закачать файл с кодом на сайт). Так же поступает Yahoo!
Да и в других случаях эта особенность не помешает. Например, я поставил себе на сервер сервер OpenID (извините за тафтологию). и теперь я могу логиниться на любой сайт поддерживающий openid, указывая в ссылке OpenID такую примерно строку: http://мой_сайт/openid.php Есть возможность указывать её следующим образом: http://мой_сайт
но при этом нужно в head-части страницы указать:
<link rel="openid.server" href="http://мой_сайт/openid.php"> <link rel="openid.delegate" href="http://мой_сайт/openid.php">
Это уже не мета. Значит вопрос звучит следующим образом:
Какой модуль позволяет нам вносить любые теги в head-область страницы на Друпале?
- andyceo's blog
- Для комментирования войдите или зарегистрируйтесь
зачем модуль? ручками page.tpl.php
- Для комментирования войдите или зарегистрируйтесь
ага, у меня мультисайтинг.
Т.е. файлы темы одни и те же для каждого сайта. (используется стандартная на первых порах).
Т.е. я не могу прописать мету с одним и тем же именем два раза в один и тот же файл - это раз, а во-вторых, для OpenID хотелось бы, чтобы возможность указать провайдерский скрипт OpenID была только у одного сайта.
Такие вот сложности. Ну что, модуль писать? :)
- Для комментирования войдите или зарегистрируйтесь
Хотя, конечно, думается такой вариант. Для каждого сайта создать директорию sites/мой_сайт/themes и туда кинуть тему и там её менять. Однако...
Но в-третьих, имхо удобнее иметь модуль, в котором структурировано расположены нужные меты...
В-четвёртых, Google И Yahoo периодически прост код на сайте обновить. каждый раз ручками файлик править - моветон, для такой системы как Друпал! :)
И всё-таки, модуль был бы прикольнее! Как вы считаете?
- Для комментирования войдите или зарегистрируйтесь
Да. плохие новости. на drupal.org говорят что такой функционал возможно появится к 7 версии. ужосс..
- Для комментирования войдите или зарегистрируйтесь
Модуль nodewords имеет свой API и свои хуки
расширяется элементарно - созданием .inc файлика с парой функций в папке tags
весь функционал реализован именно таким образом - разобраться совсем не сложно - достаточно посмотреть текущую реализацию
- Для комментирования войдите или зарегистрируйтесь
И всё-таки, модуль был бы прикольнее! Как вы считаете?
Не понимаю проблемы. page.tpl.php - вот и весь функционал.
- Для комментирования войдите или зарегистрируйтесь
Сделайте область (регион) там, где нужно расположить метатеги - оформите ее в template.php и пропишите ее вывод в page.tpl.php.
Затем достаточно будет сделать блок, ввести туда нужные метатеги (не забыв использовать фильтр Full HTML или PHP), и включить этот блок в нужное время в нужном месте - положив блок в свежеоформленную область.
Правда, при этом нужно будет помнить, что в этот блок нельзя пихать "визуальные" теги, но это уже издержки гибкости. Зато мы можем описать (запрограммировать или прописать через пути друпала), когда и где должен появляться этот блок. Еще плюс - блоков можно насоздавать много, для разных случаев.
- Для комментирования войдите или зарегистрируйтесь
У блоков автоматом div с классами проставляется.
- Для комментирования войдите или зарегистрируйтесь
У блоков автоматом div с классами проставляется.
Не автоматом, а темой. Под эти блоки надо будет свои block-...tpl.php писать. Но самый верный вариант, как уже сказал andypost, разобраться с модулем NodeWords
- Для комментирования войдите или зарегистрируйтесь
короче модуль можно написать если уж на то пошло.
- Для комментирования войдите или зарегистрируйтесь
Итак, господа!
Ой, простите, дамы и господа!
Прежде всего хочу поблагодарить всех кто откликнулся на мою беду. Вы привели достаточно интересных и достойных способов сделать то, что мне требовалось.
Однако.. Я нашёл несколько другой способ. И думаю, он оптимален! Делюсь с сообществом:
Нам необходимо создать блок типа PHP на странице управления блоками. Типа PHP означает, что нужен блок, в котором в качестве фильтра указывается обработчик PHP.
Вводим в тело блока следующий код:
<?php
drupal_set_html_head('<meta name="verify-v1" content="fmX1YhAzQ20sKTBkoEAa3W+h432WiBjtbyM78gi0V/o=" />'); //for Google
drupal_set_html_head('<meta name="y_key" content="ec64d4a23b420294" />'); //for Yahoo
drupal_set_html_head('<meta name="yandex-verification" content="6dcc2d578ba99b72" />'); //for Yandex
drupal_set_html_head('<link rel="openid.server" href="http://andyceo.ruware.com/openid.php" />'); // for OpenID server
drupal_set_html_head('<link rel="openid.delegate" href="http://andyceo.ruware.com/openid.php" />'); // for OpenID server
?>После чего блок сохраняем.
Затем идём в его настройки и выставляем:
Название:
Оставляем пустым обязательно! (то самое называние, что должно якобы показываться пользователю)
Описание блока:
произвольные меты в head
или любое другое название, что вы хотите
Настройки видимости для пользователя
Пользователи не могут управлять видимостью блока. - ставим галочку тут
Настройки видимости для ролей
anonymous user - - ставим галочку тут
Установки видимости для страницы
Показывать только на перечисленных страницах:
<front>
(т.е. показываем блок только на главной странице)
Сохраняем блок.
В списке блоков нашему блоку выставлем ему :
- Область сайта, в которой будет якобы отображаться блок - я выставил ему Заголовок, и
- вес поставил -10.
И после этого наживаем Сохранить блоки.
Итак, если всё сделано правильно, мы увидим введённые теги только на главной странице и только для незарегистрированных пользователей.
Приятным сюрпризом для меня стало то, что данный блок вообще ничего не выводит и поэтому он не обрамляется div'ами. php-код работает через API Друпала, и обеспечивает модификацию
<head><code> до вывода страницы пользователю. В общем, пользуемся и радуемся! <strong>PS:</strong> До чего же гибкая система Drupal! Я когда искал инфу обо всём этом, набрёл на оф. сайте на то как один чел сделал это всё <a href="http://drupal.org/node/112698">через редирект</a>, а точнее через модуль <a href="http://drupal.org/project/path_redirect">path_redirect</a> - он как бы создал проверочный файл (центр вебмастеров Google требует для подтверждения собственности на сайт вставить в него определённую мету, или создать файл в корневой директории на сервере) и редиректился с него на главную страницу своего сайта с кодом 302. Пишет, что сделал он это "элегантно, всё в друпале, никакого фтп, никаких закачек файлов на сервер". <strong>PPS:</strong> На всякий случай полезная инфа: Центр вебмастеров Google: http://www.google.ru/webmasters/ Центр вебмастеров Yahoo: https://siteexplorer.search.yahoo.com/ Центр вебмастеров Yandex: http://webmaster.yandex.ru/ PPS: Спасибо <a href="http://drupal.org/node/197788#comment-648624" title="англ.">этому посту</a> за подсказку.
- Для комментирования войдите или зарегистрируйтесь
Интересный вариант!
- Для комментирования войдите или зарегистрируйтесь
Собрал весь этот опыт в статье в блоге в статье Drupal: Как добавить произвольные meta-теги и другие теги в head-область HTML-страницы
- Для комментирования войдите или зарегистрируйтесь
а если на каждую страницу надо вносить свой уникальный мета тег??? как в таком случае???
Конечно идеально было бы еще одно окошко в NodeWords....
- Для комментирования войдите или зарегистрируйтесь
Тоже тема стала интересной. Хочу сделать динамический meta name="description", который формировался бы по принципу: тип_ноды + Заголовок
За основу взят пост от 05/01/2008
После "курения" форумов и экспериментов нарисовался такой код для Drupal 6.*:
<?php
if ( arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {
$node = node_load(arg(1));
switch ($node->type) {
case film:
drupal_set_html_head('<meta name="description" content="Описание фильма '. drupal_get_title(). '" />');
break;
case reliz:
drupal_set_html_head('<meta name="description" content="Характеристики dvd '. drupal_get_title(). '" />');
break;
default:
drupal_set_html_head('<meta name="description" content="'. node_get_types('name', $node). " ". drupal_get_title(). '" />');
}
}
else {
drupal_set_html_head('<meta name="description" content="'. drupal_get_title() ." | ". variable_get("site_name", ""). '" />');
}
drupal_set_html_head('<meta name="keywords" content="фильм, dvd, кино, видео, художественный, х/ф, боевые искусства, гонконга, азии, китайские, японские, карате, кунг-фу, боевик, комедия, драма, информация, база данных" />');
?>
Насколько он грузит систему, не знаю, а посмотреть в действии можно здесь. Да, "обделенной" осталась главная страница.
.
НО, где-то мелькало на форуме, что вставлять код непосредственно в блок - плохо, делается это как-то по другому, а вот где эта заметка и правильно ли я понял не пойму.
- Для комментирования войдите или зарегистрируйтесь
Для drupal 6 есть весьма полезный модуль
site_verify, он как раз позволяет добавлять нужные метатеги для стартовой страницы.
Нужна массовка в http://drupal.org/node/467240 чтобы к нему добавили валидацию для яндекса! просто напишите +1 в issue, если есть желание видеть сие в следущей версии!
- Для комментирования войдите или зарегистрируйтесь
НО, где-то мелькало на форуме, что вставлять код непосредственно в блок - плохо, делается это как-то по другому, а вот где эта заметка и правильно ли я понял не пойму.
Информация для размышления здесь
Переделал, пост от 04/10/2009, теперь это модуль, после установки которого, блок сам активируется (модуль прилагается).
- Для комментирования войдите или зарегистрируйтесь
Нужна массовка в http://drupal.org/node/467240 чтобы к нему добавили валидацию для яндекса! просто напишите +1 в issue, если есть желание видеть сие в следущей версии!
Уже не нужно: "Committed to CVS. Thanks!" :)
- Для комментирования войдите или зарегистрируйтесь
Итак новости с полей:
1)
nodewords - работа кипит, много комитов, в основном чистка кода и исправление ошибок, переход к правильному названию таблиц - nodewords вместо metatags
2)
site_verify - нужны мнения по внешнему виду страницы администрирования http://drupal.org/node/467582 а то больно убого оно всё смотрится, но работает :)
- Для комментирования войдите или зарегистрируйтесь
Я так понимаю комплексное решение этого вопроса уже реализовано в nodewords или все равно нужно ставить дополнительно site_verify?
- Для комментирования войдите или зарегистрируйтесь
Для меня друпал всё больше в последнее время напоминает конструктор лего. Взять этот-же нодевордс, вся полезность модуля в кейвордах и дескрипшне, но зато в довесок аж 3-4 плагина, которые нафик не нужны. Потом в админке на танке не проедешь, да и в опциях добавления темы будет переизбыток смысловой нагрузки.
А зачем ставить какой-то плагин к модулю, если тег подтверждения прав гугла можно поставить в page.tpl.php руками, один раз - навсегда. Для остальных поисковиков достаточно положить файлик в корень.
Наверное и гугла в скором времени появится подобная опция.
- Для комментирования войдите или зарегистрируйтесь
Наверное и гугла в скором времени появится подобная опция.
По-моему уже давно есть, по крайней мере у меня лежит в корне какой-то файл google2f............html (google-site-verification).
- Для комментирования войдите или зарегистрируйтесь
По-моему уже давно есть, по крайней мере у меня лежит в корне какой-то файл google2f............html (google-site-verification).
Пойду искать :) Что-то внимание не обращал в последнее время :)
- Для комментирования войдите или зарегистрируйтесь
Неправда ваша, в стандартной поставке никаких "гуглофайлов" нет :)
- Для комментирования войдите или зарегистрируйтесь
Неправда ваша, в стандартной поставке никаких "гуглофайлов" нет :)
Есть :) Но появилось видимо не так давно, раньше не было да и потом внимания уже не обращаешь... Добавлял недавно новый сайт и там чек лист позволяет выбрать опцию верификации файлом.
- Для комментирования войдите или зарегистрируйтесь
Неправда ваша, в стандартной поставке никаких "гуглофайлов" нет :)
Этот файл не входит в дистрибутив Drupal, его надо самому скопировать, чтобы получить доступ к webmaster Google.
- Для комментирования войдите или зарегистрируйтесь
Хотелось бы присоединится к завершенной дискуссии, хочу рассказать как сам вывожу мета-теги извиняюсь если повторю сказанное.
Полагаю новичкам ищущим ответа это пригодится.
1)Создаем тип материала в него добавляем cck нужные поля вроде- титле, дескрипшион, ну и впрочем, все остальное что нужно вывести в head.
2)Делаю выборку за счет виевс, задав ей название - metatags. Причем, как я понимаю, не нужно даже создавать блока типа виевс.
в фильтре тип материала, в аргументе номер ноды.
3)В шаблоне page темы располагаю вот это
php открывается
$view = views_get_view("metatags");
print $view->execute_display("default", array($node->nid));
php закрывается
эта функция напрямую из шаблона обратиться к нужному виевсу, а он в свою очередь выберет нужную информацию в зависимости от того на какой странице созданного мной материала я нахожусь.
Я упоминал, что копирую в тему из модуля виевс шаблоны, подставляя в название шаблонов metatags, словом делаю то что называется темизация views.
Получается примерно так
views-view-fields--metatags.tpl.php
views-view--metatags.tpl.php
views-view-unformatted--metatags.tpl.php
в последних двух удаляю лишние дивы и классы для html. - создают лишние для нашего кода обвертки дивами
В первый файл подставляю конструкцию вида
php открывается
echo '
meta content="'.$fields["field_keywords_value"]->content.'" name="keywords"
meta content="'.$fields["field_description_value"]->content.'" name="description"
title>'.$fields["field_title_value"]->content.'закрытый title
';
php-закрывается
не забудьте все html ставить в угловые скобки
Предупрежу сразу, что шаблон page используется всей темой, если конечно его не переопределить к примеру для отдельного типа материала, как я обычно и делаю.
По-этому если вставить все эту конструкцию у остальных типов материалов, пропадут ключи,
но никто не мешает перенести cck поля на другие материалы.
Ну и наверно полезно дать ссылки на материалы для обобщения материала
http://www.romka.eu/blog/drupal-article-3-part-4-drupal-themeing-views
Надеюсь кому то пригодится, здоровая критика приветствуется
- Для комментирования войдите или зарегистрируйтесь
и вот это
http://notesit.ru/2011/01/drupal-vstraivaem-view-v-nodu-s-parametrom/
с вот этим
http://drupalace.ru/uroki
- Для комментирования войдите или зарегистрируйтесь
тут несколько раз в коментах упоминается, что можно просто добавить нужные мета-теги в page.tpl.php и долго не мог понять, почему же у меня не получается?
а потом понял, что похоже это в 5-м или 6-м друпале тег head присутствовал в page.tpl.php, а в седьмом этот этот файл содержит только содержимое body и head в него при всем желании не вставишь..
и как же быть в семерке? возможно, создать head.tpl.php ? пойду попробую..
- Для комментирования войдите или зарегистрируйтесь
http://api.drupal.org/api/drupal/modules!system!html.tpl.php/7
- Для комментирования войдите или зарегистрируйтесь











Комментарии