2016-04-28 1 views
2

Я создаю некоторые пользовательские модули для Drupal 8. Они включают некоторые модификации заголовков для лучшей интеграции Facebook. Вот что это было похоже на Drupal 7 (СЕМЬ):Что такое Drupal 8 эквивалент Drupal 7's drupal_add_html_head в модуле?

$element1 = array 
     (
     '#tag' => 'meta', 
     '#attributes' => array 
      ( 
      'property' => 'og:title', 
      'content' => " Profile: " . $record->NameFirst . " " . $record->NameLast, 
      ), 
     ); 
    drupal_add_html_head($element1, 'og_title'); 

Но эта функция drupal_add_html_head давно давно нет в Drupal 8. И я совсем потерялась, куда НАЧАТЬ атаковать это. Может быть, это «Headerbag»? Есть Headerbag :: add. Может быть, это в переменной возвращаемого модуля, возможно, добавив еще один элемент, где-то здесь:

return array(
    '#markup' => t($pageContent), 
); 

Может быть HtmlResponseAttachmentsProcessor :: setHeaders? HeaderBag :: установлен? Session :: setRequestHeader? PoStreamWriter :: SetHeader? PoMetadataInterface :: SetHeader?

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

ответ

3

Вы можете использовать крюк your_module_page_attachments. Например, если вы хотите настроить OG: тег изображения вы можете сделать следующее в: информации

function your_module_page_attachments(array &$page) { 
    $ogImage = array(
     '#tag' => 'meta', 
     '#attributes' => array(
      'property' => 'og:image', 
      'content' => url to your image, 
     ), 
    ); 

    $page['#attached']['html_head'][] = [$ogImage, 'ogImage']; 
} 

Крючка: https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Render!theme.api.php/function/hook_page_attachments/8.2.x

+0

Есть ли дополнительная работа в routing.yml, чтобы вызвать вызов your_module_page_attachments? – Anders8

+0

Нет, вы создаете файл «your_module.module», где «your_module» - это, конечно, имя вашего модуля. В этом файле вы объявляете функцию сверху, снова замените «your_module» на ваше имя модуля. Затем просто очистите кеш, и он должен работать. –