Comment ajouter une balise META dans la section <head>… </head>?

19

Comment puis-je ajouter la balise META suivante dans la <head>...</head>section dans Drupal 8?

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
lesley n.
la source

Réponses:

49

À partir de différentes sources, j'ai trouvé différentes façons d'ajouter des balises META dans Drupal 8, donc de compiler toutes les façons.


1. Utilisation du fichier THEME.theme

Je pense que la même question a été posée sur enjeuoverflow: ajoutez une balise meta à la tête dans drupal 8 et si vous voyez la réponse de @Danielishko , il a fourni le code suivant,

Ajoutez simplement le code suivant dans votre THEME.themefichier, videz le cache et vous serez prêt à partir. Remarque: function theme_preprocess_html(&$variables) {...}devrait être déjà là dans votre fichier .theme, donc n'en créez pas de nouveau, sinon cela donnera une erreur.

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

Image de sortie:

entrez la description de l'image ici


2. Grâce au fichier modèle:

Une autre question a été posée à ce sujet: comment définir / supprimer les balises meta drupal 8 .

Si vous lisez la question dans le lien mentionné ci-dessus, Questioner a mentionné qu'en utilisant le html.html.twigfichier modèle, vous pouvez directement ajouter des balises META à<head>....</head>

html.html.twigfichier que vous pouvez trouver core/modules/sytem/templates/html.html.twig, vous pouvez copier et coller cela dans le dossier de modèle de votre thème et votre thème l'utilisera.

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

Image de sortie:

entrez la description de l'image ici

REMARQUE: c'est ma propre logique et j'ai essayé de trouver une référence pour cela, je n'ai trouvé aucune référence à ce sujet, sauf une ligne fournie par Questioner dans le lien ci-dessus, mais puisque nous modifions le fichier de modèle pour ajouter d'autres choses, pourquoi nous ne pouvons pas utiliser pour ajouter Mots clés. VEUILLEZ FOURNIR DES COMMENTAIRES SI CE N'EST PAS UNE BONNE FAÇON DE FAIRE, Ce sera également une expérience d'apprentissage pour moi, merci.


3. Créez votre propre module personnalisé

Si vous vous référez à ce tutoriel de: Ajouter de nouvelles balises HTML dans Drupal 8 , Il a décrit la manière générale d'ajouter une balise à head dans Drupal 8. J'ai modifié selon vos besoins. Vous pouvez vous référer à ce tutoriel: Drupal 8: Créer un module simple pour savoir comment développer un module simple dans Drupal 8, et le code suivant ira dans votre fichier module_name.module, c'est tout.

pour module_name.modulefichier,

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

Je pense que cette méthode et la méthode décrite dans la 1ère option sont tout à fait les mêmes.


4. Utilisation du module Drupal

Je ne sais pas, comment utiliser cette approche, j'ai essayé de trouver. Ici, je mentionne parce que lorsque le point d'ajouter des balises meta vient ce module toujours pop-up.

Je pense que vous devriez utiliser cette approche. Dans la réponse acceptée, il a décrit la méthode du module et vous pouvez utiliser le module Metatag pour cela. Ce module a des modules dépendants Token & Ctools , ce qui est très courant. Dans cette réponse, toute la procédure a été décrite, donc je ne parle pas ici.

CodeNext
la source
J'ai vérifié le module de métabalises avant d'écrire mon article, mais je ne sais pas quel champ je dois choisir pour afficher ce que je veux. Et même si tel était le cas, je dois le faire pour chaque type de contenu. Peut-être existe-t-il un moyen plus confortable?
lesley n.
@lesleyn. J'ai mis à jour ma réponse, j'ai inclus différentes façons d'ajouter des métabalises, mais comme vous, je n'ai pas non plus compris comment ajouter en utilisant des modules de métabalises, je pense que, grâce à ce module, nous pouvons accéder à tout ce qui est fourni dans la liste des jetons, utilisez votre metatag répertorié, je pense que nous avons nned de créer un jeton pour cela, c'est le jus ma conjecture sauvage. Othe approché, j'ai testé, et ils fonctionnent.
CodeNext
1
Cela devrait être marqué comme correct =) +1
Cyclonecode
1
@ AntonínSlejška, n-1 et n-3 sont à peu près la même méthode, la différence est qu'en n-1 vous ajoutez du code dans le fichier .theme tandis qu'en n-3 vous créez un module personnalisé pour cela. Je dirais que pour n-1, c'est propre et facile. Et pour HOMEPAGE, vous devez ajouter une ligne de code dans le code que j'ai fourni dans n-1. Je viens d'ajouter une mise à jour en n-1 pour votre besoin, faites-moi savoir si vous copiez-collez cela, je dois le supprimer. Si le problème persiste, faites-le moi savoir.
CodeNext
@CodeNext Je suis désolé. J'ai oublié de vider le cache. Cela fonctionne parfaitement. Merci pour l'aide. J'ai copié le code.
Antonín Slejška
4

Lorsque vous ajoutez du contenu à un contrôleur, un bloc, une entité, un champ ou à d'autres endroits, vous n'avez pas besoin de créer un hook.

Vous pouvez ajouter la balise meta directement à un thème ou d'un élément de rendu ( #theme, #type, #markup):

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

Une fois rendu, le tag bouillonne jusqu'au niveau de la page et est ajouté à la <head>...</head>section.

Dans un hook de prétraitement, vous pouvez attacher au niveau supérieur de $variables, voir /drupal//a/288989/47547

4k4
la source