web-dev-qa-db-ja.com

モジュールにあるオーバーライドされたTwigテンプレートに変数を渡す方法は?

(テーマではなく)カスタムモジュールにあるオーバーライドされたTwigテンプレートに変数を渡したいのですが。

this answer および this answer に続いて、このコードをmymodule.moduleに記述しました。

_function mymodule_preprocess_page(array &$variables) {
  $variables['hello'] = 'world';
}

function mymodule_theme_suggestions_node_add_list(array $variables) {
  $suggestions = [];
  $suggestions[] = 'node_add_list__' . 'custom';
  return $suggestions;
}

function mymodule_theme() {
  return [
    'node_add_list__custom' => [
      'base hook' => 'node_add_list',
    ],
  ];
}
_

次に、mymodule/templates/node-add-list--custom.html.twigに追加しました:

_myvar: {{ hello }}
_

しかし、ページを更新しても、「myvar:」の後に何も表示されません。 キャッシュをクリアしたことをお伝えします

hook_preprocess_page()hook_theme_suggestions_HOOK()/hook_theme()と一緒に使用する場合、管理するために特定のものはありますか?

1
Kwadz

function MYMODULE_preprocess_node_add_listする必要があります。

function MYMODULE_preprocess_node_add_list(array &$variables) {
  $variables['hello'] = 'world';
}

この前処理フックは、実際には HOOK_preprocess_HOOK と呼ばれます。名前の最後のHOOKを参照してください。 'base hook'であるnode_add_listをターゲットにする必要があります。したがって、ページの代わりに前処理を行います。

2
leymannx