Як додати метатег у розділ <head>… </head>?


19

Як я можу додати наступний метатег до <head>...</head>розділу в Drupal 8?

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

Відповіді:


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>

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

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

ПРИМІТКА. Це моя власна логіка, і я намагався знайти посилання на це, я не знайшов посилання на це, за винятком одного рядка, який надає Questioner у верхньому посиланні, але оскільки ми редагуємо файл шаблону для додавання інших матеріалів, чому ми не можемо використовувати для додавання теги. ПРОСЛУЖАЙТЕ КОМЕНТАРИ, ЯКЩО ЦЕ НЕ ПРАВИЛЬНИЙ ШЛЯХ ДІЙСНЯ, це також буде для мене досвідом навчання, дякую


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'];
}

Я думаю, цей спосіб і спосіб, описані в 1-му варіанті, цілком однакові.


4. Використання модуля Drupal

Я не впевнений, як використовувати такий підхід, я намагався знайти. Тут я згадую, тому що коли додається мета-теги, цей модуль завжди з'являється.

Я думаю, цей підхід вам слід використовувати. У прийнятій відповіді він описав спосіб модуля, і ви можете використовувати для цього модуль Metatag . Цей модуль має залежні модулі Token & Ctools , що дуже часто. У цій відповіді описана ціла процедура, тому я тут не згадую.


Я перевірив модуль метатегів до того, як написав свій пост, але не знаю, яке поле мені потрібно вибрати, щоб вивести те, що я хочу. І навіть якщо це буде так, ніж я маю робити це для кожного типу вмісту. Можливо, є більш комфортний спосіб?
леслі н.

@lesleyn. Я оновив свою відповідь, я включив різний спосіб додавання метатегів, але, як і ви, я також не зрозумів, як додати модулі метатегів, я маю на увазі, через цей модуль ми можемо отримати доступ до всього, що передбачено у списку токена, отже, до використовуйте ваш перелічений метатег, я думаю, що ми створили маркер для цього. Це моя дика здогадка. Інші підійшли до тестування, і вони працюють.
CodeNext

1
Це слід позначити як правильне =) +1
Cyclonecode

1
@ AntonínSlejška, І n-1 і n-3 є майже однаковим методом, різниця полягає в n-1, ви додаєте код у файл .theme, тоді як в n-3 ви створюєте для цього спеціальний модуль. Я б сказав, піти на n-1, це буде чисто і легко. А для ДОМАШНЯ СТРАХУВАННЯ, вам потрібно додатково рядок коду в коді, який я вказав у n-1. Я щойно додав оновлення в n-1 для ваших потреб, дайте мені знати, якщо ви скопіюєте це вставте, мені потрібно видалити це. Якщо все-таки є питання, будь ласка, повідомте мене про це.
CodeNext

@CodeNext Вибачте. Я забув очистити кеш. Це працює ідеально. Дякую за допомогу. Я скопіював код.
Антонін Слейшка

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.