【Drupal】レンダリングAPIとTIWGを使用して動的にHTMLを生成してみた
![【Drupal】TWIGを使用してレンダリング可能なAPIを使ってみた](/sites/default/files/styles/wide/public/2024-02/drupal10_11.png?itok=kg0Oy0EZ)
レンダリングAPIは、レンダリング配列に設定されたデータをHTMLに変換して出力します。レンダリング配列は、レンダリングAPI用にあらかじめ定められた書き方やデータ構造を満たす連想配列のことを指します。ここでは、レンダリングAPIとTIWGを使用して動的にHTMLを生成してみました。
この記事は以下のサイトを、 DeepL版プロの翻訳家 テンプレートを使用して翻訳して引用しています。AI翻訳のため一部訳がおかしい箇所がありましたらご容赦ください。
Rendering Twig templates programmatically in Drupal 8
by Jeff Geerling
動的にHTMLを生成するには、Twigテンプレートと変数のセットを受け取り、テンプレートをレンダリングし、中の変数をすべて置き換えて、文字列として出力する必要があります。
以下はDrupal7での例ですが、first_nameの変数を持つ本当にシンプルなメールテンプレートをカスタムモジュールに持ちたい場合、DrupalやPHPで送信する前にメールをカスタマイズすることができます:
<?php
$body = theme_render_template(drupal_get_path('module', 'my_module') . '/templates/email-body.tpl.php', array(
'first_name' => 'Jane',
));
send_email($from, $to, $subject, $body);
?>
Drupal 8では、テンプレートエンジンがTwigに変更されたため、theme_render_template()関数がありません。そして今日まで、便利なtheme_render_template()が新しい、同様に便利なtwig_render_template()関数に置き換えられたことを示す変更記録はありませんでした!Tim Plunkettの助けのおかげで、この新しい関数を見つけることができました。そして彼に背中を押されたので、次回Drupal 8でtheme_render_template()を探すときに役立つように、新しい変更記録を作成しました: theme_render_templateはtwig_render_templateに変更されました。
Drupal 8では、機能的に同等にするために私が行った2つの追加がありますが、Drupal 7と非常によく似ています。
<?php
$markup = twig_render_template(drupal_get_path('module', 'my_module') . '/templates/email-body.html.twig', array(
'my-variable' => 'value',
// Needed to prevent notices when Twig debugging is enabled.
'theme_hook_original' => 'not-applicable',
));
// Cast to string since twig_render_template returns a Markup object.
$body = (string) $markup;
send_email($from, $to, $subject, $body);
?>
通常のページリクエスト以外でテンプレートをレンダリングする場合(cronジョブ、キューワーカー、Drushコマンドなど)、Twigテーマエンジンがロードされない可能性があります。その場合、手動でTwigエンジンをロードする必要があります。
<?php
// Load the Twig theme engine so we can use twig_render_template().
include_once \Drupal::root() . '/core/themes/engines/twig/twig.engine';
?>
この記事に関するご質問やご意見などございましたらお問い合わせフォームからお気軽にご連絡ください。