カスタムモジュール用のカスタムTwigテンプレートの作成
Drupal 8の一般的な考え方は、カスタムモジュールのPHPコードで直接HTMLを作成することを避けることです。これをTwigテンプレートに任せたいのです。モジュールに新しいTwigテンプレートを作成するには、次の手順を実行します。
ステップ1:.moduleファイルでhook_themeを定義する
まだ存在しない場合は[module].moduleファイルを作成し、Twigテンプレートのそれぞれを定義するコードを追加します。配列の各要素のキーは、後でテンプレートを呼び出すために使用するものです。ファイル名にハイフンを使用しないでください。
function test_twig_theme($existing, $type, $theme, $path) {
return [
'my_template' => [
'variables' => ['test_var' => NULL],
],
];
}
hook_theme()のドキュメントを参照してください。
ステップ2:テンプレートを呼び出す
レンダリング配列を返す場所(ルーティングymlファイルから呼び出されるコントローラーメソッド、または他の場所)で、Twigテンプレートを呼び出します。以下は、モジュールのルーティングymlファイルから呼び出されるテストモジュールの例です。(この部分については追加情報が必要です)
/**
* @file
* Contains \Drupal\test_twig\Controller\TestTwigController.
*/
namespace Drupal\test_twig\Controller;
use Drupal\Core\Controller\ControllerBase;
class TestTwigController extends ControllerBase {
public function content() {
return [
'#theme' => 'my_template',
'#test_var' => $this->t('Test Value'),
];
}
}
コード内の別のワークフローの一部として使用する必要がある場合は、レンダーメソッドを使用して出力を構築することもできます:
$renderable = [
'#theme' => 'my_template',
'#test_var' => 'test variable',
];
$rendered = \Drupal::service('renderer')->renderPlain($renderable);
これはキャッシュを行わない基本的な実装であることに注意してください。Render API Overviewドキュメントには、これにキャッシュを追加する方法に関する追加情報があります。キャッシュについて言えば、変数名はキャッシュされるため、変数名を変更する場合(たとえば「test_var」を「my_var」に)は、キャッシュを更新する必要があります。
ステップ3:Twigテンプレートを作成する
モジュールのtemplatesフォルダー内にTwigテンプレートを作成します。ファイル名はhook_theme()で定義したものと一致する必要があります(アンダースコアをハイフンに置き換えます)。この場合、ファイル名はmy-template.html.twigになります。
テストに使用したファイルは次のとおりです:
<p>Test twig template!</p>
<p>test_var: {{ test_var }}</p>
この利点は、テーマにまだ存在しない場合、モジュールで定義されたテンプレートファイルが使用されることです。テーマのtemplatesフォルダーにファイルを置き、キャッシュをクリア(drush cache-rebuild)するだけで、そのファイルが読み取られます。
整理のために、ファイルをサイトテーマの任意のサブフォルダーに配置できます。