Bagaimana cara menambahkan tag meta di bagian <head> ... </head>?

19

Bagaimana saya bisa menambahkan tag meta berikut di dalam <head>...</head>bagian di Drupal 8?

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

Jawaban:

49

Dari sumber yang berbeda saya menemukan cara yang berbeda untuk menambahkan tag meta di Drupal 8, maka kompilasi semua cara.


1. Menggunakan file THEME.theme

Saya pikir pertanyaan yang sama telah ditanyakan pada stockoverflow: tambahkan meta tag ke kepala di drupal 8 dan jika Anda melihat jawaban dari @Danielishko , Dia telah memberikan kode berikut,

Cukup tambahkan kode berikut dalam THEME.themefile Anda , hapus cache dan Anda akan baik-baik saja. Catatan: function theme_preprocess_html(&$variables) {...}harus sudah ada di file tema. Anda, maka jangan membuat yang baru, jika tidak akan memberikan kesalahan.

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

Gambar output:

masukkan deskripsi gambar di sini


2. Melalui file Templat:

Pertanyaan lain ditanyakan tentang topik ini: Cara mengatur / menghapus tag metup 8 drupal .

Jika Anda membaca pertanyaan di tautan yang disebutkan di atas, Penanya telah menyebutkan bahwa menggunakan html.html.twigfile template Anda dapat langsung menambahkan tag meta<head>....</head>

html.html.twigfile yang dapat Anda temukan di core/modules/sytem/templates/html.html.twig, Anda dapat menyalin dan menempelkannya di folder template tema Anda dan tema Anda akan menggunakannya.

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

Gambar Output:

masukkan deskripsi gambar di sini

CATATAN: Ini adalah logika saya sendiri dan mencoba mencari referensi untuk ini, saya tidak menemukan referensi mengenai hal ini kecuali satu baris yang disediakan oleh Penanya di tautan di atas, tetapi karena kami mengedit file template untuk menambahkan hal-hal lain mengapa kami tidak dapat menggunakan untuk menambahkan tag. HARAP MEMBERIKAN KOMENTAR JIKA INI BUKAN CARA YANG BENAR, Ini juga akan menjadi pengalaman belajar bagi saya, Terima kasih.


3. Buat Modul Kustom Anda sendiri

Jika Anda merujuk tutorial ini: Menambahkan tag HTML baru di dalam Drupal 8 , Dia telah menjelaskan cara umum menambahkan tag ke kepala di Drupal 8. Saya telah memodifikasi sesuai kebutuhan Anda. Anda dapat merujuk tutorial ini: Drupal 8: Buat Modul Sederhana untuk cara mengembangkan modul sederhana di Drupal 8, dan kode berikut akan masuk dalam file module_name.module Anda, itu saja.

untuk module_name.modulefile,

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

Saya pikir, metode dan metode yang dijelaskan dalam opsi 1 ini cukup sama.


4. Menggunakan modul Drupal

Saya tidak yakin, bagaimana cara menggunakan pendekatan ini, saya coba temukan. Di sini saya menyebutkan karena ketika titik menambahkan tag meta datang modul ini selalu muncul.

Saya pikir pendekatan ini harus Anda gunakan. Dalam jawaban yang diterima ia telah menjelaskan cara modul dan Anda dapat menggunakan, modul Metatag untuk itu. Modul ini memiliki modul dependen Token & Ctools , yang merupakan hal yang sangat umum. Dalam jawaban itu seluruh prosedur telah dijelaskan, jadi saya tidak menyebutkan di sini.

CodeNext
sumber
Saya memeriksa modul metatag sebelum saya menulis posting saya, tetapi saya tidak tahu bidang mana yang harus saya pilih untuk menampilkan apa yang saya inginkan. Dan bahkan jika itu terjadi maka saya harus melakukan ini untuk setiap jenis konten. Mungkin ada cara yang lebih nyaman?
lesley n.
@lesleyn. Saya telah memperbarui jawaban saya, saya telah memasukkan cara yang berbeda untuk menambahkan metatag, tetapi seperti Anda, saya juga tidak tahu cara menambahkan menggunakan modul Metatag, saya kira, melalui modul itu kita dapat mengakses apa pun yang disediakan dalam daftar token, oleh karena itu untuk gunakan metatag terdaftar Anda, saya pikir kami ingin membuat token untuk itu, ini hanya tebakan liar saya. Othe mendekati saya telah menguji, dan mereka BEKERJA.
CodeNext
1
Ini harus ditandai sebagai benar =) +1
Cyclonecode
1
@ AntonínSlejška, Baik n-1 dan n-3 adalah metode yang hampir sama, perbedaannya adalah pada n-1 Anda menambahkan kode dalam file tema. Sementara di n-3 Anda membuat modul khusus untuk itu. Saya akan mengatakan pergi untuk n-1, apakah akan bersih dan mudah. Dan untuk HOMEPAGE, Anda perlu tambahan baris kode dalam kode yang telah saya berikan di n-1. Saya baru saja menambahkan pembaruan di n-1 untuk kebutuhan Anda, beri tahu saya jika Anda menyalin-menempelnya, saya perlu menghapusnya. Jika masih, ada masalah, harap beri tahu saya.
CodeNext
@ CodeNext Saya minta maaf. Saya lupa menghapus cache. Ini bekerja dengan sempurna. Terima kasih untuk bantuannya. Saya telah menyalin kode.
Antonín Slejška
4

Saat menambahkan konten ke controller, blokir, entitas, bidang atau tempat lain Anda tidak perlu membuat hook.

Anda dapat menambahkan meta tag langsung ke tema atau membuat elemen ( #theme, #type, #markup):

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

Ketika diberikan tag gelembung hingga ke tingkat halaman dan ditambahkan ke <head>...</head>bagian.

Dalam kait praproses Anda dapat melampirkan ke tingkat atas $variables, lihat /drupal//a/288989/47547

4k4
sumber