プリプロセス関数にTwigテンプレートの変数を追加するにはどうすればよいですか?


10

次のコードを使用して、テンプレートの変数を前処理しています。

function template_preprocess_imagegallery_format(&$vars) {
  template_preprocess_image_formatter($vars);
  $vars['image']['#theme'] = 'igimage';
  $vars['image']['#thumbnail'] = ImageStyle::load('thumbnail')->buildUrl($vars ['image']['#uri']);
  $vars['image']['#fullimage'] = file_create_url($vars ['image']['#uri']);
}

#uri変数はすでに存在しており、変更するだけですべて正常に動作します。ただし、同じ画像の2つの異なるスタイルが必要なため、ここに変数を追加する必要があります。ただし、これらの変数を配列に追加するだけでは機能しません。

Twigテンプレートで使用可能な変数をでダンプした場合{{ dump(_context|keys) }}、そこに追加した変数が表示されません。テンプレートでそれらを使用しようとすると、何も挿入されません。

値が配列に追加されていることがわかります。フィールド全体をレンダリングするテーマに画像変数をダンプすると、配列に変数が表示されます。ただし、画像変数自体をレンダリングするテンプレートではまだ使用できません。

Twigテンプレートで使用できる変数をプリプロセス関数に追加するには、他に何が必要ですか?


配列名$varsとキーの間にはスペースがあります(例:)['image']。それは許されないと確信しています。
othermachines

スペースを削除しました。それは実際には問題ではなく、スペースの有無にかかわらず同じ結果が得られます。スペースは、例からコピーしたコードからのものです。
マッドサイエンティスト

関数の名前を変更しましたか?そうではありませんがtemplate_preprocess_imagegallery_format、「テンプレート」はテーマまたはモジュール名に置き換える必要があります。また、キャッシュをクリアする必要があります。
othermachines

回答:


8

ようやく問題を解決しました。問題は、間違ったプリプロセッサに変数を追加しようとしたことです。#themeの編集はそこで機能しますが、ここで設定したテーマを前処理するために必要な変数を追加します。

function template_preprocess_imagegallery_format(&$vars) {
  template_preprocess_image_formatter($vars);
  $vars['image']['#theme'] = 'igimage';
}

function template_preprocess_igimage(&$vars) {
    $vars['thumbnail'] = ImageStyle::load('thumbnail')->buildUrl($vars['uri']);
    $vars['fullimage'] = file_create_url($vars['uri']);
}

4

テーマ名:atvdirect

  • テーマのルートにatvdirect.info.yml以外にatvdirect.themeファイルを作成します
  • atvdirect.themeファイルに以下のコードを追加します
  • page.html.twigで{{logopath}}を使用します

    <?php
    function atvdirect_preprocess_page(&$variables) {
      $variables['logopath'] = '/'.drupal_get_path('theme','atvdirect') .'/logo.png';
    }
    ?>

1
最後に、これは中に置かれるべきファイルとは何と言っていただき、ありがとうございます。
ライアンH

すばらしい答え、よく説明されています。
生徒の
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.