たくさんのフィールドがあるビューがあり、それらのフィールドを次のようにスタイリングしています:
views-view-fields.html.twig
私の.themeファイルでは、前処理関数を使用して上記のテンプレートに追加の変数を渡しています。
function theme_preprocess_views_view_fields(&$vars) {
$vars['my_var'] = 'hello';
}
twigテンプレートでは、次のようなことができます:
{% for field in fields -%}
{{my_var}}
{%- endfor %}
これは最初にロードされたフィールドのチャームのように機能しますが、[さらに読み込む]をクリックするか、公開されたフィルターを使用してビューをフィルターすると、ロードされた他の要素にはmy_varがありません。
ここで、テンプレートファイルで直接my_varを "kinting"します。 Ajaxで読み込まれた他のすべての要素のmy_varがNULLであることがわかりました。これにより、問題はtheme_preprocess_views_view_fieldsが1回呼び出され、ページが初めて読み込まれ、Ajaxから完全に無視されることにあると思いました。コール。
この前処理は、Ajax呼び出しによって呼び出されて処理されるべきではありませんDrupalはビュー自体で実行されていますか?
そうでない場合、他の要素がロードされたときにこのフックを再実行するためにDrupalを照会する方法はありますか?
ありがとう!
テンプレート「views-view-fields.html.twig」には、「view」、「fields」、「row」の3つの変数が返されます。これは here で確認できます。
したがって、カスタム変数を追加するには、以下のようにこれらを3つの変数に入れる必要があります。
function dt8_preprocess_views_view_field(&$vars)
{
$vars['row']->my_var = 'Hey';
}
テンプレート「views-view-fields.html.twig」では、次のようにintを出力します
{{ row.my_var }}