Как добавить метатег в раздел <head>… </ head>?

19

Как я могу добавить следующий метатег внутри <head>...</head>раздела в Drupal 8?

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Lesley N.
источник

Ответы:

49

Из разных источников я нашел разные способы добавления мета-тегов в Drupal 8, отсюда и все способы компиляции.


1. Использование файла THEME.theme

Я думаю, что тот же вопрос был задан в колдовстве: добавьте метатег к голове в drupal 8, и если вы видите ответ @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 .

Если вы прочитали вопрос в вышеупомянутой ссылке, Вопросник упомянул, что с помощью html.html.twigфайла шаблона вы можете напрямую добавить метатеги в<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>

Выходное изображение:

введите описание изображения здесь

ПРИМЕЧАНИЕ: это моя собственная логика, и я пытался найти ссылку для этого, я не нашел никаких ссылок на это, за исключением одной строки, предоставленной спрашивающим в приведенной выше ссылке, но так как мы редактируем файл шаблона для добавления других вещей, почему мы не можем использовать их для добавления теги. ПОЖАЛУЙСТА, ПРЕДОСТАВЛЯЙТЕ КОММЕНТАРИИ, ЕСЛИ ЭТО НЕ ПРАВИЛЬНЫЙ СПОСОБ, Это также будет для меня опытом обучения, спасибо.


3. Создайте свой собственный модуль

Если вы обратитесь к этому руководству: Добавление новых тегов HTML в Drupal 8 , он описал общий способ добавления тега к заголовку в 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 для этого. Этот модуль имеет зависимые модули Token & Ctools , что очень распространенная вещь. В этом ответе была описана вся процедура, поэтому я здесь не упоминаю.

CodeNext
источник
Я проверил модуль метатега перед тем, как написать свое сообщение, но я не знаю, какое поле мне нужно выбрать для вывода того, что я хочу. И даже если бы это было так, чем я должен сделать это для каждого типа контента. Может быть, есть более удобный способ?
Лесли н.
@lesleyn. Я обновил свой ответ, я включил другой способ добавления метатегов, но, как и вы, я также не выяснил, как добавлять, используя модули метатегов, я думаю, что через этот модуль мы можем получить доступ ко всему, что предусмотрено в списке токенов, используйте ваш перечисленный метатег, я думаю, что мы создали для этого токен, это мое дикое предположение. Подошло, что я проверил, и они работают.
CodeNext
1
Это должно быть помечено как правильное =) +1
Cyclonecode
1
@ AntonínSlejška, n-1 и n-3 - это почти один и тот же метод, разница в том, что n-1 вы добавляете код в файл .theme, а в n-3 вы создаете специальный модуль для этого. Я бы сказал, пойти на н-1, это будет чисто и легко. А для HOMEPAGE вам нужно добавить дополнительную строку кода в коде, который я предоставил в n-1. Я только что добавил обновление в n-1 для ваших нужд, дайте мне знать, если вы копируете и вставляете это, мне нужно удалить это. Если проблема не устранена, пожалуйста, дайте мне знать.
CodeNext
@ КодNext Извините. Я забыл очистить кеш. Работает отлично. Спасибо за помощь. Я скопировал код.
Антонин Слейшка
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, см. Https://drupal.stackexchange.com/a/288989/47547.

4k4
источник