web-dev-qa-db-ja.com

ビューで使用されるajaxは前処理フックを呼び出しますか?

たくさんのフィールドがあるビューがあり、それらのフィールドを次のようにスタイリングしています:

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を照会する方法はありますか?

ありがとう!

6
Drupalotto

テンプレート「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 }}
2