カスタムテーマを使用しないD8のプロジェクトがあります。ビジュアルテーマの必要がないため、すべてにデフォルトの7つのテーマを使用しています。
だから私の質問:モジュールを使用してテーマテンプレートをオーバーライドすることは可能ですか?テーマをまったく実装せずに?
ノードのテンプレートにカスタムのサードパーティ生成値を追加したい場合があります。
これは私がやったことです:
実装されたカスタムテンプレート:
function MY_MODULE_theme($existing, $type, $theme, $path) {
return array(
'video_teaser' => [
'template' => 'video_teaser',
'variables' => NULL,
]
);
}
実装されたhook_theme_suggestions_alter:
function MY_MODULE_theme_suggestions_alter(array &$suggestions, array $variables, $hook) {
if(in_array('node__teaser', $suggestions)){
$suggestions[] = 'video_teaser';
}
}
そして、これは、デフォルトのテンプレートの代わりに機能し、私のvideo_teser
テンプレートが使用されます。
しかし、デフォルトのノード変数をカスタムテンプレートに渡すときに問題が発生しました。それらは自動的に渡されず、現在のアプローチを使用してこれを行う方法を見つけることができませんでした。
これは、基本フック 'node'を使用してhook_theme()
で行うことができます。
function MY_MODULE_theme($existing, $type, $theme, $path) {
return [
'node__video_teaser' => [
'template' => 'node--video-teaser',
'base hook' => 'node',
],
];
}
ベースフックを定義する必要はありません。 Drupalはこれを自動的に検出できます。重要なのは、テーマの提案とまったく同じように機能するため、二重下線を使用することです。Drupalがベースフックを見つけた後このフックの前処理関数を複製し、ノードの変数を提供します。