什么是Drupal 8相当于Drupal 7的模块中的“drupal_add_html_head”?

时间:2016-04-28 04:13:23

标签: drupal drupal-8

我正在为Drupal 8创建一些自定义模块。它们包括一些标题修改,以便更好地集成Facebook。这是Drupal 7(SEVEN)中的样子:

    $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 ::设置?会议:: setRequestHeader? PoStreamWriter ::的setHeader? PoMetadataInterface ::的setHeader?

不幸的是,我几乎找不到如何使用它们的例子。我相信这里的每个人都熟悉在以前的版本中使用工作的代码的烦恼,这些代码在新代码中变形为“无法解决问题”。

2 个答案:

答案 0 :(得分:3)

您可以使用your_module_page_attachments挂钩。例如,如果要调整og:image标记,可以执行以下操作:

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

答案 1 :(得分:0)

首选的替代方法是在构建数组中使用 #attached 属性。

$build['#attached']['html_head'][] = array(
...
);

以下是详细说明的更改记录:https://www.drupal.org/node/2160069