Mencoba menambahkan tag kepala html di Drupal 8, beta 2

9

Dengan Drupal 8,0 beta2, drupal_add_html_head() telah usang dalam mendukung #attached. Jadi cara lama adalah:

function MYTHEME_page_build(&$page) {
    $viewport = array(
          '#type' => 'html_tag',
          '#tag' => 'meta',
          '#attributes' => array(
            'name' => 'viewport',
            'content' => 'width=device-width, initial-scale=1.0, maximum-scale=2.0, minimum-scale=0.55, user-scalable=yes',
          ),
        );
        drupal_add_html_head($viewport, 'viewport');
}

Berdasarkan pemberitahuan perubahan yang sekarang Anda gunakan #attached. Jadi kode di atas pada dasarnya sama dengan bagian terakhir yang berubah menjadi:

$build['#attached']['html_head'][] = [$viewport, 'viewport'];

Ini tidak berfungsi dan tidak ada pesan kesalahan di pengawas. Saya juga mencoba meletakkan ini di halaman alter serta bertukar $builddengan $variablesdan $outputtetapi masih tidak berhasil. Selain itu, saya mencoba semuanya sebagai array:

  $build['#attached']['html_head'][] = array(
    '#type' => 'html_tag',
    '#tag' => 'meta',
    '#attributes' => array(
      'name' => 'viewport',
      'content' => 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no',
    ),
  );

... tapi itu tidak berhasil juga. Saya tidak yakin apa yang saya lakukan salah, sepertinya itu harus berfungsi.

Memperbarui

Berikut adalah kode kerja yang menggunakan hook_page_attachments_alteryang tidak ada dalam D8 Beta 2 karena hanya berkomitmen untuk dev.

function MYTHEME_page_attachments_alter(array &$page) {
    $viewport = array(
      '#type' => 'html_tag',
      '#tag' => 'meta',
      '#attributes' => array(
        'name' => 'viewport',
        'content' => 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no',
      ),
    );
    $page['#attached']['html_head'][] = [$viewport, 'viewport'];
  }

Satu-satunya masalah sekarang adalah bahwa tag viewport core tidak ditimpa jadi saya terjebak dengan tag dan core kustom saya. Tidak yakin bagaimana menangani yang itu atau haruskah tag saya menimpa inti?

masukkan deskripsi gambar di sini

Danny Englander
sumber

Jawaban:

7

Anda tidak memiliki preprocess $ build, jadi tidak bisa bekerja seperti itu. $ build harus berupa render array yang dirender di suatu tempat. Saya juga tidak melihat bagaimana ini bisa bekerja sebelumnya, karena ini sudah dikonversi di template_preprocess_html () sebelum fungsi Anda berjalan.

Tambahkan hook_page_attachments (_alter) () dan deprecate hook_page_build / alter () baru saja dikomit, dan sebagai tema, Anda dapat mengimplementasikan hook_page_attachments_alter (), cari contoh di patch yang dikomit, seperti common_test_page_attachments_alter () .

Jadi, sesuatu seperti $page['#attached']['html_head'][] = [$viewport, 'viewport'];harus bekerja di sana.

Berdir
sumber
Terima kasih atas bantuan Anda, tetapi saya masih bingung. Saya ingin tahu apakah Anda dapat membuatnya bekerja. Saya sudah mencoba hook_page_build dan mengubah tetapi masih tidak ada sukacita. Saya bahkan mengambil beberapa contoh dari inti tanpa hasil. Sepertinya tidak terlalu sulit.
Danny Englander
1
Perbarui pertanyaan Anda dengan contoh kode Anda saat ini. Tentunya contoh yang saya tunjuk bekerja, karena digunakan untuk tes. Jadi, Anda harus melakukan sesuatu yang berbeda. Hook yang saya sarankan untuk digunakan adalah hook_page_attachments_alter (), bukan page_build (). Saat menerapkan hook dan sesuatu tidak berfungsi, hal pertama yang harus diverifikasi adalah selalu jika kode Anda dipanggil, dengan menambahkan jalan keluar; sebagai contoh.
Berdir
Saya telah menambahkan kode kerja yang menggunakan saran Anda hook_page_attachments_alter. Ada satu sisi yang mempengaruhi bahwa saya sekarang memiliki dua tag viewport, satu dari inti dan yang saya tambahkan dari tema saya jadi saya tidak yakin bagaimana menghadapinya.
Danny Englander
1
Itulah argumen kedua seharusnya, elemen html_head menggunakannya untuk menjaga hal-hal unik. Melihat inti, elemen itu ditambahkan di DefaultHtmlFragementRenderer :: setDefaultMetatags (). API baru di sana tidak memiliki cara untuk menentukan kunci, yang sepertinya merupakan masalah yang cukup serius. Saya sarankan Anda membuka masalah untuk ini. Mungkin drupal.org/node/2350943 terkait.
Berdir
Saya membuka masalah inti: drupal.org/node/2359987
Danny Englander