如何在<head>…</ head>部分中添加元标记?


19

如何<head>...</head>在Drupal 8 的部分中添加以下元标记?

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

Answers:


49

从不同的来源,我发现了在Drupal 8中添加元标记的不同方法,因此可以进行各种编译。


1.使用THEME.theme文件

我认为在stockoverflow上也有人问过同样的问题:在drupal 8的头部添加meta标签 ,如果您看到@Danielishko的答案,他提供了以下代码,

只需在THEME.theme文件中添加以下代码,清除缓存,您就可以使用了。注意:function theme_preprocess_html(&$variables) {...}.theme文件中应该已经存在该文件,因此请不要创建新文件,否则会出错。

function theme_preprocess_html(&$variables) {

  $xuacompatible = [
    '#tag' => 'meta',
    '#attributes' => [
      'http-equiv' => 'x-ua-compatible',
      'content' => 'ie=edge',
    ],
  ];


  $variables['page']['#attached']['html_head'][] = [$xuacompatible, 'x-ua-compatible'];
}

输出图像:

在此处输入图片说明


2.通过模板文件:

关于此主题的另一个问题是:如何设置/删除drupal 8 meta标签

如果您在上述链接中阅读了问题,那么Questioner提到使用html.html.twig模板文件可以直接将meta标签添加到<head>....</head>

html.html.twig您可以在找到的文件core/modules/sytem/templates/html.html.twig,可以将其复制并粘贴到主题的模板文件夹中,主题将使用该文件。

html.html.twig

<!DOCTYPE html>
<html{{ html_attributes }}>
  <head>
    <head-placeholder token="{{ placeholder_token|raw }}">
    <title>{{ head_title|safe_join(' | ') }}</title>
    <css-placeholder token="{{ placeholder_token|raw }}">
    <js-placeholder token="{{ placeholder_token|raw }}">
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  </head>
  <body{{ attributes }}>
    {#
      Keyboard navigation/accessibility link to main content section in
      page.html.twig.
    #}
    <a href="#main-content" class="visually-hidden focusable">
      {{ 'Skip to main content'|t }}
    </a>
    {{ page_top }}
    {{ page }}
    {{ page_bottom }}
    <js-bottom-placeholder token="{{ placeholder_token|raw }}">
  </body>
</html>

输出图像:

在此处输入图片说明

注意: 这是我自己的逻辑,并试图为此找到参考,除了上面链接中Quester提供的一行内容外,我没有找到与此有关的任何参考,但是由于我们编辑模板文件以添加其他内容,所以我们不能使用添加标签。如果这不是正确的方法,请提供意见,这对我来说也是学习的经验,谢谢。


3.创建自己的自定义模块

如果您参考本教程:在Drupal 8中添加新的HTML标签,他描述了在Drupal 8中向头部添加标签的一般方法。我已根据您的要求进行了修改。您可以参考本教程:Drupal 8:为在Drupal 8中开发简单模块创建一个简单模块,下面的代码将放在您的module_name.module文件中。

对于module_name.module文件,

<?php
/**
 * Implements hook_page_attachments().
 */
function module_name_page_attachments(array &$page) {
  $xuacompatible = [
        '#tag' => 'meta',
        '#attributes' => [
          'http-equiv' => 'x-ua-compatible',
          'content' => 'ie=edge',
        ],
      ];
  $page['#attached']['html_head'][] = [$xuacompatible, 'x-ua-compatible'];
}

我认为,此方法与第一个选项中描述的方法完全相同。


4.使用Drupal模块

我不确定如何尝试使用这种方法。我在这里提及的原因是,当添加元标记时,该模块始终会弹出。

我认为您应该使用这种方法。在接受的答案中,他描述了模块方式,您可以使用Metatag模块。该模块具有依赖模块TokenCtools,这是很常见的事情。在该答案中,已描述了整个过程,因此在此不予赘述。


在写文章之前,我检查了metatag modul,但是我不知道我必须选择哪个字段来输出我想要的内容。即使这样,我也必须为每种内容类型执行此操作。也许有一种更舒适的方法?
莱斯利ñ。

@lesleyn。我更新了答案,添加了不同的添加元标记的方法,但是像您一样,我也没有弄清楚如何使用元标记模块进行添加,我想,通过该模块,我们可以访问令牌列表中提供的任何内容,因此使用您列出的metatag,我想我们为此创建了令牌,这是我的猜测。我经过测试的Othe接近了,他们正在工作。
CodeNext

1
应该将其标记为正确=)+1
Cyclonecode '16

1
@AntonínSlejška,n-1和n-3都是几乎相同的方法,不同之处在于n-1中您在.theme文件中添加代码,而在n-3中您为此创建了自定义模块。我想说的是n-1,会干净又容易。对于HOMEPAGE,您需要在我在n-1中提供的代码中增加一行代码。我刚刚在n-1中添加了您需要的更新,如果您复制粘贴该内容,请告诉我,我需要删除它。如果还是有问题,请告诉我。
CodeNext

@CodeNext对不起。我忘了清除缓存。完美的作品。谢谢您的帮助。我已经复制了代码。
安东宁Slejška

4

将内容添加到控制器,块,实体,字段或其他位置时,无需创建挂钩。

您可以直接添加元标记的任何主题或渲染元素(#theme#type#markup):

$build['username'] = [
  '#theme' => 'username',
  '#account' => \Drupal::currentUser(),
  '#attached' => [
    'html_head' => [
      [
        [
          '#tag' => 'meta',
          '#attributes' => [
            'name' => 'foo',
            'content' => 'bar',
          ],
        ],
        'my_module_foo',
      ],
    ],
  ],
];

呈现后,标签会冒泡至页面级别,并添加到该<head>...</head>部分。

在预处理挂钩中,您可以附加到的顶层$variables,请参阅/drupal//a/288989/47547


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.