Jak dodać metatag w sekcji <head>… </head>?

19

Jak mogę dodać następujący metatag wewnątrz <head>...</head>sekcji w Drupal 8?

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Lesley N.
źródło

Odpowiedzi:

49

Z różnych źródeł znalazłem inny sposób dodawania metatagów w Drupal 8, stąd kompilowanie wszystkich sposobów.


1. Korzystanie z pliku THEME.theme

Wydaje mi się, że to samo pytanie zostało zadane przy przepływie stawek: dodaj metatag do head w drupal 8, a jeśli zobaczysz odpowiedź @Danielishko , podał następujący kod:

Wystarczy dodać następujący kod do THEME.themepliku, wyczyścić pamięć podręczną, a będziesz gotowy. Uwaga: function theme_preprocess_html(&$variables) {...}powinien już być w pliku .theme, dlatego nie twórz nowego, w przeciwnym razie spowoduje błąd.

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

Obraz wyjściowy:

wprowadź opis zdjęcia tutaj


2. Poprzez plik szablonu:

Inne pytanie zostało zadane na ten temat: Jak ustawić / usunąć metatagi drupal 8 .

Jeśli czytasz pytanie w powyższym linku, Pytający wspomniał, że za pomocą html.html.twigpliku szablonu możesz bezpośrednio dodawać metatagi<head>....</head>

html.html.twigplik, który można znaleźć w. core/modules/sytem/templates/html.html.twigMożesz skopiować i wkleić go w folderze szablonów motywu, a Twój motyw go użyje.

od 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>

Obraz wyjściowy:

wprowadź opis zdjęcia tutaj

UWAGA: To jest moja własna logika i próbowałem znaleźć odniesienie do tego, nie znalazłem żadnego odniesienia w tym zakresie, z wyjątkiem jednej linii podanej przez Pytającego w powyższym linku, ale ponieważ edytujemy plik szablonu w celu dodania innych rzeczy, dlaczego nie możemy użyć do dodania tagi. PROSZĘ PRZEDSTAWIĆ KOMENTARZE, JEŚLI TO NIE JEST WŁAŚCIWY SPOSÓB ZROBIENIA, Będzie to również dla mnie doświadczenie edukacyjne, dzięki.


3. Utwórz własny moduł niestandardowy

Jeśli zapoznasz się z tym samouczkiem: Dodawanie nowych znaczników HTML w Drupal 8 , opisał ogólny sposób dodawania znaczników do głowy w Drupal 8. Zmodyfikowałem zgodnie z twoimi wymaganiami. Możesz odnieść się do tego samouczka: Drupal 8: Utwórz prosty moduł, aby dowiedzieć się, jak opracować prosty moduł w Drupal 8, a następujący kod zostanie umieszczony w pliku nazwa_modułu.module, to wszystko.

do module_name.modulepliku

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

Myślę, że ta metoda i metoda opisana w 1. opcji są całkiem takie same.


4. Korzystanie z modułu Drupal

Nie jestem pewien, jak zastosować to podejście, próbowałem znaleźć. Wspominam tutaj, ponieważ kiedy pojawia się punkt dodawania metatagów, moduł ten zawsze się pojawia.

Myślę, że to podejście należy zastosować. W przyjętej odpowiedzi opisał sposób modułu i możesz do tego użyć modułu Metatag . Ten moduł ma zależne moduły Token & Ctools , co jest bardzo powszechne. W tej odpowiedzi opisano całą procedurę, więc nie wspominam tutaj.

CodeNext
źródło
Sprawdziłem moduł metatagu przed napisaniem mojego postu, ale nie wiem, które pole muszę wybrać, aby wyświetlać to, co chcę. I nawet jeśli tak, to muszę to zrobić dla każdego rodzaju treści. Może istnieje wygodniejszy sposób?
Lesley n.
@lesleyn. Zaktualizowałem swoją odpowiedź, podałem inny sposób dodawania metatagów, ale podobnie jak ty również nie wymyśliłem, jak dodawać za pomocą modułów Metatag, myślę, że dzięki temu modułowi możemy uzyskać dostęp do wszystkiego, co jest na liście tokenów, stąd użyjcie wymienionego metatagu, myślę, że musimy stworzyć do tego token, to chyba moje dzikie przypuszczenie. Podszedł do mnie przetestowałem, a oni DZIAŁAJĄ.
CodeNext
1
To powinno być oznaczone jako poprawne =) +1
Kod cyklonowy
1
@ AntonínSlejška, Zarówno n-1, jak i n-3 są właściwie tą samą metodą, różnica polega na tym, że n-1 dodajesz kod w pliku .theme, podczas gdy w n-3 tworzysz do tego niestandardowy moduł. Powiedziałbym, że idź na n-1, będzie czysty i łatwy. A dla STRONY GŁÓWNEJ musisz dodać dodatkowy wiersz kodu w kodzie, który podałem w n-1. Właśnie dodałem aktualizację w n-1 dla twojej potrzeby, daj mi znać, jeśli ją skopiujesz i wkleisz, muszę to usunąć. Jeśli nadal występuje problem, daj mi znać.
CodeNext
@CodeNext Przepraszam. Zapomniałem wyczyścić pamięć podręczną. Działa idealnie. Dzięki za pomoc. Skopiowałem kod.
Antonín Slejška
4

Podczas dodawania treści do kontrolera, bloku, encji, pola lub innych miejsc nie trzeba tworzyć zaczepu.

Możesz dodać tag meta bezpośrednio z każdym tematem lub czynią elementu ( #theme, #type, #markup):

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

Po renderowaniu znacznik przechodzi do poziomu strony i jest dodawany do <head>...</head> sekcji.

W haku przedprocesowym, który można podłączyć do najwyższego poziomu $variables, patrz /drupal//a/288989/47547

4k4
źródło