Делегирование OpenId для сайта на Drupal 7.

Прочитав про получение OpenId для своего сайта вы можете спросить "А как же мне добавить те две строчки в секцию <head> сайта на Друпале?" Не заморачивайтесь установкой дополнительных модулей - у них нулевые шансы успевать за апдейтами версий Друпала. Читайте дальше, это гораздо проще сделать самостоятельно. Я буду рассказывать про Drupal 7 в примерах (поскольку этот сайт построен на Drupal 7 в данный момент), но похожий подход можно с лёгкостью применить к другой версии Друпала, потратив несколько минут на поиск соответствующей функции.

В первую очередь, найдите файл template.php для темы вашего сайта. Хорошей практикой будет сделать дочернюю тему вместо редактирования стандартной потому, что любой апдейт стандартной темы может откатить ваши изменения и вам придётся делать всё заново. Создание дочерних тем выходит за рамки данной статьи, я поверю, что вы всё делаете правильно. Откройте template.php для вашей (надеюсь, дочерней) темы и найдите функцию

function YOUR_THEME_NAME_preprocess_html(&$variables, $hook) {

В функции preprocess_html можно изменить значение переменной $head до того, как она станет использоваться в дебрях Друпала (главным образом в html.tpl.php при заполнении секции <head>). В Drupal 7 добавилась функция drupal_add_html_head(), которой отныне следует пользоваться для изменения переменной $head. Этот сайт использует myopenid.com в качестве провайдера OpenId (адрес сервера "http://www.myopenid.com/server"), а сам OpenId выглядит как "http://docfish-ru.myopenid.com/", поэтому нам нужно добавить следующие строчки в секцию <head>:

<head>
  ...
  <link rel="openid.server" href="http://www.myopenid.com/server" />
  <link rel="openid.delegate" href="http://docfish-ru.myopenid.com/" />
</head>

Вот, как это делается:

function YOUR_THEME_NAME_preprocess_html(&$variables, $hook) {
  if(drupal_is_front_page()) { //Используйте вместо переменной $is_front, недоступной в template.php
    //Создание массива для добавления в секцию HEAD
    $element_openid_server = array(
      '#tag' => 'link', //HTML тег - <link/>
      '#attributes' => array( //Атрибуты тега <link/>
        'rel' => 'openid.server',
        'href' => 'http://www.myopenid.com/server',
      ),
    );
    $element_openid_delegate = array(
      '#tag' => 'link',
      '#attributes' => array(
        'rel' => 'openid.delegate',
        'href' => 'http://docfish-ru.myopenid.com/',
      ),
    );
    
    drupal_add_html_head($element_openid_server, 'openid_server');
    drupal_add_html_head($element_openid_delegate, 'openid_delegate');
  }
}

Обратите внимание на использование функции drupal_is_front_page() - добавление тегов OpenId куда-либо, кроме заглавной страницы не имеет смысла и будет только засорять эфир. Сохраните и загрузите template.php на ваш сайт. Не забудьте обновить реестр тем, чтобы увидеть последние изменения.

Оценка: