Drupal 8, beta 2'de bir html kafa etiketi eklemeye çalışıyorum


9

Drupal 8.0 beta2 ile lehine drupal_add_html_head() kullanımdan kaldırıldı#attached . Eski yol şuydu:

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

Şimdi kullandığınız değişiklik bildirimini temel alır #attached. Yani yukarıdaki kod aslında son bölümle aynıdır:

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

Bu olsa çalışmaz ve bekçi köpeği hata iletileri. Ben de değiştirir bir sayfada bu koyarak yanı sıra takas denedim $buildile $variablesve $outputancak hala çalışır değil. Ayrıca, her şeyi bir dizi olarak denedim:

  $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',
    ),
  );

... ama bu da işe yaramadı. Neyi yanlış yaptığımdan emin değilim, çalışması gerektiği gibi görünüyor.

Güncelleme

hook_page_attachments_alterD8 Beta 2'de olmayan ve dev için kararlı olan kullanan çalışma kodu .

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

Şimdi tek sorun, çekirdeğin viewport etiketinin üzerine yazılmadığı için özel etiketime ve çekirdeğe takılı kaldım. Bunu nasıl ele alacağınızdan emin değil misiniz yoksa etiketimin üzerine çekirdek yazılması mı gerekiyor?

resim açıklamasını buraya girin

Yanıtlar:


7

Ön işlemde $ build'iniz yok, bu yüzden böyle çalışamazsınız. $ build, bir yerde işlenen bir oluşturma dizisi olmalıdır. Ayrıca, işlevinizi çalıştırmadan önce bu zaten template_preprocess_html () dönüştürülmüş olduğundan, bu daha önce nasıl çalışmış olabilir görmüyorum.

Ekle hook_page_attachments (_alter) () ve kullanımdan kaldırmak hook_page_build / alter () sadece işlendiği ve tema olarak, siz (hook_page_attachments_alter uygulayabilirsiniz) gibi kararlı yama içinde örnekler için göz common_test_page_attachments_alter () .

Yani, $page['#attached']['html_head'][] = [$viewport, 'viewport'];orada bir şeylerin çalışması gerekir.


Yardımın için teşekkürler ama hala kayboldum. Bunu işe yarayıp yaratamayacağınızı merak ediyorum. Ben hook_page_build ve değiştirmek denedim ama yine de sevinç yok. Hatta hiç şans olmadan çekirdekten bazı örnekler aldım. Bu kadar zor olmalı gibi görünmüyor.
Danny Englander

1
Sorunuzu mevcut kod örneklerinizle güncelleyin. Elbette işaret ettiğim örnek testler için kullanıldığı için çalışıyor. Yani farklı bir şey yapmalısınız. Kullanmayı önerdiğim kanca page_build () değil hook_page_attachments_alter () şeklindedir. Bir kanca uygularken ve bir şey çalışmıyorsa, doğrulanacak ilk şey her zaman kodunuz çağrılmışsa, bir çıkış ekleyerek; Örneğin.
Berdir

Önerilerinizi kullanan bir çalışma kodu ekledim hook_page_attachments_alter. Şimdi iki görünüm etiketi var, bir tanesi çekirdekli ve temamdan eklediğim bir tarafı var, bu yüzden bununla nasıl başa çıkacağımdan emin değilim.
Danny Englander

1
İkinci argümanın olması gereken şey budur, html_head öğeleri bunu benzersiz tutmak için kullanıyor. Çekirdeğe bakıldığında, bu öğe DefaultHtmlFragementRenderer :: setDefaultMetatags () içine eklenir. Buradaki yeni API'nin bir anahtarı belirtmek için bir yolu yok, bu oldukça ciddi bir sorun gibi görünüyor. Bunun için bir sorun açmanızı öneririm. Belki de drupal.org/node/2350943 ilgilidir.
Berdir

Temel bir sorun açtım: drupal.org/node/2359987
Danny Englander
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.