it-swarm.com.de

Versuch, ein HTML-Head-Tag in Drupal 8, Beta 2) hinzuzufügen

Mit Drupal 8.0 beta2, drupal_add_html_head()wurde veraltet zugunsten von #attached. Der alte Weg war also:

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

Basierend auf dem Änderungshinweis verwenden Sie jetzt #attached. Der obige Code ist also im Wesentlichen derselbe, wobei der letzte Teil geändert wurde zu:

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

Dies funktioniert jedoch nicht und keine Fehlermeldungen im Watchdog. Ich habe auch versucht, dies in eine Seitenänderung einzufügen und $build Mit $variables Und $output Zu tauschen, aber es funktioniert immer noch nicht. Außerdem habe ich das Ganze als Array ausprobiert:

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

... aber das hat auch nicht funktioniert. Ich bin nicht sicher, was ich falsch mache, scheint, dass es funktionieren sollte.

Update

Hier ist Arbeitscode der hook_page_attachments_alter Verwendet, der nicht in D8 Beta 2 enthalten ist, da er nur für dev festgelegt wurde.

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

Das einzige Problem ist jetzt, dass das Ansichtsfenster-Tag des Kerns nicht überschrieben wird, sodass ich mit meinem benutzerdefinierten Tag und den Kerns festgefahren bin. Sie sind sich nicht sicher, wie Sie damit umgehen sollen, oder sollte mein Tag den Kern überschreiben?

enter image description here

9
Danny Englander

Sie haben kein $ build in preprocess, können also nicht so arbeiten. $ build muss ein Render-Array sein, das irgendwo gerendert wird. Ich sehe auch nicht, wie das vorher hätte funktionieren können, da dies bereits in template_preprocess_html () konvertiert wurde, bevor Ihre Funktion ausgeführt wird.

Fügen Sie hook_page_attachments (_alter) () hinzu und verwerfen Sie hook_page_build/alter () wurde gerade festgeschrieben. Als Thema können Sie hook_page_attachments_alter () implementieren. Suchen Sie im festgeschriebenen Patch nach Beispielen wie common_test_page_attachments_alter () .

Also so etwas wie $page['#attached']['html_head'][] = [$viewport, 'viewport']; sollte dort arbeiten.

7
Berdir