Drupal 8、ベータ2でhtmlヘッドタグを追加しようとしています


9

Drupal 8.0 beta2では、drupal_add_html_head() 非推奨になりました#attached。だから古い方法は:

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

現在使用している変更通知に基づいています#attached。したがって、上記のコードは基本的に同じで、最後の部分は次のように変更されています。

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

ただし、これは機能せず、ウォッチドッグにエラーメッセージも表示されません。私はこれをページ変更に入れたりスワップ$build$variablesたりしようとしました$outputが、それでもまだ機能しません。さらに、すべてを配列として試しました:

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

...しかし、それもうまくいきませんでした。私は何が間違っているのかわかりません、それはうまくいくはずです。

更新

hook_page_attachments_alterこれは、D8ベータ2にはない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'];
  }

現在の唯一の問題は、コアのビューポートタグが上書きされないため、カスタムタグとコアのスタックが表示されることです。それを処理する方法がわからない、または私のタグがコアのコアを上書きする必要がありますか?

ここに画像の説明を入力してください

回答:


7

$ buildがプリプロセスにないので、そのように動作することはできません。$ buildは、どこかにレンダリングされるレンダー配列である必要があります。関数が実行される前にtemplate_preprocess_html()で既に変換されているため、これが以前にどのように機能していたかもわかりません。

hook_page_attachments(_alter)()を追加し、hook_page_build / alter()がコミットされたばかりであり、テーマとして、hook_page_attachments_alter()を実装して、common_test_page_attachments_alter()などのコミットされたパッチの例を探すことができます。

だから、のようなもの$page['#attached']['html_head'][] = [$viewport, 'viewport'];がそこで働くべきです。


さて、あなたの助けに感謝しますが、私はまだ失われています。これを機能させることができるかどうか知りたいです。私はhook_page_buildと変更しようとしましたが、それでも喜びはありません。私は運からコアからいくつかの例をつかみさえしました。そんなに難しいとは思えない。
ダニーイングランド人2014年

1
次に、現在のコード例で質問を更新してください。確かに、私が指摘した例は、テストに使用されているので機能しています。だからあなたは何か違うことをしているに違いない。私が使用を提案したフックは、page_build()ではなく、hook_page_attachments_alter()です。フックを実装して何かが機能しない場合、最初に確認することは、出口を追加してコードが呼び出されているかどうかを常に確認することです。例えば。
Berdir 2014年

私はあなたの提案を使用する作業コードを追加しましたhook_page_attachments_alter。1つの副作用があります。2つのビューポートタグがあり、1つはコアから、もう1つはテーマから追加したため、どのように処理するかわかりません。
ダニーイングランド人2014年

1
これが2番目の引数の目的であり、html_head要素はそれを使用して物事を一意に保つことができます。コアを見ると、その要素はDefaultHtmlFragementRenderer :: setDefaultMetatags()に追加されています。そこでの新しいAPIには、キーを指定する方法がありません。これはかなり深刻な問題のようです。この問題を開くことをお勧めします。たぶんdrupal.org/node/2350943が関連しています。
Berdir 2014年

私は中心的な問題を開きました:drupal.org/node/2359987
ダニーイングランド人
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.