【问题标题】:What is the Drupal 8 equivalent of Drupal 7's "drupal_add_html_head" within a module?模块中 Drupal 7 的“drupal_add_html_head”的 Drupal 8 等价物是什么?
【发布时间】:2016-04-28 04:13:23
【问题描述】:

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

    $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::add。也许它在模块的返回变量中,可能在此处添加另一个元素:

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

也许是 HtmlResponseAttachmentsProcessor::setHeaders?头包::设置?会话::setRequestHeader? PoStreamWriter::setHeader? PoMetadataInterface::setHeader?

不幸的是,我几乎找不到如何使用这些的示例。而且我相信这里的每个人都熟悉在以前的版本中可以工作的代码在新代码中变成“没有解决方案无法工作”的烦恼。

【问题讨论】:

    标签: drupal drupal-8


    【解决方案1】:

    您可以使用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

    【讨论】:

    • routing.yml 中是否有额外的工作来触发对 your_module_page_attachments 的调用?
    • 不,您创建一个“your_module.module”文件,其中“your_module”当然是您的模块的名称。在该文件中,您从上面声明函数,再次将“your_module”替换为您的模块名称。然后只需清除缓存,它应该可以工作。
    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢。 ? 在相关站点迁移到版本 9 之后,我是否在 5 年后得到了答案,这是否说明了有关 Drupal 的一些信息? :( 老实说,我不记得我是否让它工作了,我只能怀疑 FB 在整合外部内容的方法上变得越来越封闭。?
    • 有专门的 Drupal 答案站点:drupal.stackexchange.com
    猜你喜欢
    • 2020-01-09
    • 1970-01-01
    • 2020-07-19
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2018-11-02
    • 1970-01-01
    相关资源
    最近更新 更多