Произвольный <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-область страницы на Друпале?

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано player в чт, 06/12/2007 - 17:33.

зачем модуль? ручками page.tpl.php


Опубликовано andyceo в чт, 06/12/2007 - 17:46.

ага, у меня мультисайтинг.

Т.е. файлы темы одни и те же для каждого сайта. (используется стандартная на первых порах).

Т.е. я не могу прописать мету с одним и тем же именем два раза в один и тот же файл - это раз, а во-вторых, для OpenID хотелось бы, чтобы возможность указать провайдерский скрипт OpenID была только у одного сайта.

Такие вот сложности. Ну что, модуль писать? :)


Опубликовано andyceo в чт, 06/12/2007 - 17:53.

Хотя, конечно, думается такой вариант. Для каждого сайта создать директорию sites/мой_сайт/themes и туда кинуть тему и там её менять. Однако...

Но в-третьих, имхо удобнее иметь модуль, в котором структурировано расположены нужные меты...

В-четвёртых, Google И Yahoo периодически прост код на сайте обновить. каждый раз ручками файлик править - моветон, для такой системы как Друпал! :)

И всё-таки, модуль был бы прикольнее! Как вы считаете?


Опубликовано andyceo в чт, 06/12/2007 - 23:11.

Да. плохие новости. на drupal.org говорят что такой функционал возможно появится к 7 версии. ужосс..


Опубликовано andypost@drupal.org в чт, 06/12/2007 - 23:24.

Модуль nodewords имеет свой API и свои хуки
расширяется элементарно - созданием .inc файлика с парой функций в папке tags
весь функционал реализован именно таким образом - разобраться совсем не сложно - достаточно посмотреть текущую реализацию


Опубликовано edhel в пт, 07/12/2007 - 03:28.

И всё-таки, модуль был бы прикольнее! Как вы считаете?

Не понимаю проблемы. page.tpl.php - вот и весь функционал.


Опубликовано marazmus в пт, 07/12/2007 - 04:09.

Сделайте область (регион) там, где нужно расположить метатеги - оформите ее в template.php и пропишите ее вывод в page.tpl.php.

Затем достаточно будет сделать блок, ввести туда нужные метатеги (не забыв использовать фильтр Full HTML или PHP), и включить этот блок в нужное время в нужном месте - положив блок в свежеоформленную область.

Правда, при этом нужно будет помнить, что в этот блок нельзя пихать "визуальные" теги, но это уже издержки гибкости. Зато мы можем описать (запрограммировать или прописать через пути друпала), когда и где должен появляться этот блок. Еще плюс - блоков можно насоздавать много, для разных случаев.


Опубликовано edhel в пт, 07/12/2007 - 05:58.

У блоков автоматом div с классами проставляется.


Опубликовано Dan в пт, 07/12/2007 - 06:29.

У блоков автоматом div с классами проставляется.

Не автоматом, а темой. Под эти блоки надо будет свои block-...tpl.php писать. Но самый верный вариант, как уже сказал andypost, разобраться с модулем NodeWords


Опубликовано player в пт, 07/12/2007 - 07:51.

короче модуль можно написать если уж на то пошло.


Опубликовано andyceo в сб, 05/01/2008 - 17:37.

Итак, господа!

Ой, простите, дамы и господа!

Прежде всего хочу поблагодарить всех кто откликнулся на мою беду. Вы привели достаточно интересных и достойных способов сделать то, что мне требовалось.

Однако.. Я нашёл несколько другой способ. И думаю, он оптимален! Делюсь с сообществом:

Нам необходимо создать блок типа 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> за подсказку.


Опубликовано player в пн, 07/01/2008 - 12:51.

Интересный вариант!


Опубликовано andyceo в пн, 21/07/2008 - 11:35.

Собрал весь этот опыт в статье в блоге в статье Drupal: Как добавить произвольные meta-теги и другие теги в head-область HTML-страницы


Опубликовано anton_ua в сб, 28/02/2009 - 19:20.

а если на каждую страницу надо вносить свой уникальный мета тег??? как в таком случае???
Конечно идеально было бы еще одно окошко в NodeWords....


Опубликовано Serg_M в вс, 04/10/2009 - 02:38.

Тоже тема стала интересной. Хочу сделать динамический 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, кино, видео, художественный, х/ф, боевые искусства, гонконга, азии, китайские, японские, карате, кунг-фу, боевик, комедия, драма, информация, база данных" />');
?>

Насколько он грузит систему, не знаю, а посмотреть в действии можно здесь. Да, "обделенной" осталась главная страница.

.
НО, где-то мелькало на форуме, что вставлять код непосредственно в блок - плохо, делается это как-то по другому, а вот где эта заметка и правильно ли я понял не пойму.


Опубликовано andypost@drupal.org в сб, 03/10/2009 - 22:00.

Для drupal 6 есть весьма полезный модуль  site_verify, он как раз позволяет добавлять нужные метатеги для стартовой страницы.

Нужна массовка в http://drupal.org/node/467240 чтобы к нему добавили валидацию для яндекса! просто напишите +1 в issue, если есть желание видеть сие в следущей версии!


Опубликовано Serg_M в вс, 04/10/2009 - 06:14.

"Serg_M" написал(а):

НО, где-то мелькало на форуме, что вставлять код непосредственно в блок - плохо, делается это как-то по другому, а вот где эта заметка и правильно ли я понял не пойму.

Информация для размышления здесь

Переделал, пост от 04/10/2009, теперь это модуль, после установки которого, блок сам активируется (модуль прилагается).


Опубликовано Dan в вс, 04/10/2009 - 08:30.

"andypost@drupal.org" написал(а):

Нужна массовка в http://drupal.org/node/467240 чтобы к нему добавили валидацию для яндекса! просто напишите +1 в issue, если есть желание видеть сие в следущей версии!

Уже не нужно: "Committed to CVS. Thanks!" :)


Опубликовано andypost@drupal.org в пн, 05/10/2009 - 04:51.

Итак новости с полей:
1)  nodewords - работа кипит, много комитов, в основном чистка кода и исправление ошибок, переход к правильному названию таблиц - nodewords вместо metatags
2)  site_verify - нужны мнения по внешнему виду страницы администрирования http://drupal.org/node/467582 а то больно убого оно всё смотрится, но работает :)


Опубликовано selfar в пн, 22/02/2010 - 03:52.

Я так понимаю комплексное решение этого вопроса уже реализовано в nodewords или все равно нужно ставить дополнительно site_verify?


Опубликовано Stargazer в пн, 22/02/2010 - 11:14.

Для меня друпал всё больше в последнее время напоминает конструктор лего. Взять этот-же нодевордс, вся полезность модуля в кейвордах и дескрипшне, но зато в довесок аж 3-4 плагина, которые нафик не нужны. Потом в админке на танке не проедешь, да и в опциях добавления темы будет переизбыток смысловой нагрузки.

А зачем ставить какой-то плагин к модулю, если тег подтверждения прав гугла можно поставить в page.tpl.php руками, один раз - навсегда. Для остальных поисковиков достаточно положить файлик в корень.

Наверное и гугла в скором времени появится подобная опция.


Опубликовано Serg_M в пн, 22/02/2010 - 12:09.

"Stargazer" написал(а):

Наверное и гугла в скором времени появится подобная опция.

По-моему уже давно есть, по крайней мере у меня лежит в корне какой-то файл google2f............html (google-site-verification).


Опубликовано Stargazer в пн, 22/02/2010 - 12:35.

По-моему уже давно есть, по крайней мере у меня лежит в корне какой-то файл google2f............html (google-site-verification).

Пойду искать :) Что-то внимание не обращал в последнее время :)


Опубликовано marazmus в пт, 26/02/2010 - 04:34.

Неправда ваша, в стандартной поставке никаких "гуглофайлов" нет :)


Опубликовано Stargazer в пт, 26/02/2010 - 19:04.

Неправда ваша, в стандартной поставке никаких "гуглофайлов" нет :)

Есть :) Но появилось видимо не так давно, раньше не было да и потом внимания уже не обращаешь... Добавлял недавно новый сайт и там чек лист позволяет выбрать опцию верификации файлом.


Опубликовано Serg_M в сб, 27/02/2010 - 04:41.

"marazmus" написал(а):

Неправда ваша, в стандартной поставке никаких "гуглофайлов" нет :)

Этот файл не входит в дистрибутив Drupal, его надо самому скопировать, чтобы получить доступ к webmaster Google.


Опубликовано hurt в ср, 15/06/2011 - 16:56.

Хотелось бы присоединится к завершенной дискуссии, хочу рассказать как сам вывожу мета-теги извиняюсь если повторю сказанное.

Полагаю новичкам ищущим ответа это пригодится.

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
Надеюсь кому то пригодится, здоровая критика приветствуется


Опубликовано hurt в ср, 15/06/2011 - 16:47.

и вот это
http://notesit.ru/2011/01/drupal-vstraivaem-view-v-nodu-s-parametrom/
с вот этим
http://drupalace.ru/uroki


Опубликовано dangler в вт, 13/03/2012 - 13:24.

тут несколько раз в коментах упоминается, что можно просто добавить нужные мета-теги в page.tpl.php и долго не мог понять, почему же у меня не получается?
а потом понял, что похоже это в 5-м или 6-м друпале тег head присутствовал в page.tpl.php, а в седьмом этот этот файл содержит только содержимое body и head в него при всем желании не вставишь..
и как же быть в семерке? возможно, создать head.tpl.php ? пойду попробую..


Опубликовано Dan в вт, 13/03/2012 - 23:37.

http://api.drupal.org/api/drupal/modules!system!html.tpl.php/7


Новое на сайте