Twig Extensions
配列操作、日付フォーマット、国際化、テキスト処理のための追加Twigフィルターを提供します。
twig_extensions
インストール
composer require 'drupal/twig_extensions:8.x-2.5'
composer require 'drupal/twig_extensions:8.x-2.1'
概要
Twig Extensionsモジュールは、廃止されたtwig/extensionsパッケージの機能をDrupalに提供し、Drupal coreに直接含めるべきではない一般的な追加Twig機能を提供します。このモジュールは、Twigテンプレート内で直接テキストや日付の操作機能を必要とするテーマ開発者に特に役立ちます。
このモジュールは、4つのカテゴリに整理された7つのTwigフィルターを提供します:配列操作(shuffle)、日付フォーマット(time_diff)、国際化(localizeddate、localizednumber、localizedcurrency)、テキスト処理(truncate、wordwrap)。これらのフィルターはDrupalのTwig環境にシームレスに統合され、適切なローカライゼーションのためにDrupalの翻訳システムを尊重します。
国際化フィルターはPHPのintl拡張を利用して、日付、数値、通貨のロケール対応フォーマットを提供し、異なる地域の標準に従った適切な数値と日付のフォーマットが必要な多言語サイトに不可欠です。
Features
- 配列要素の順序をランダム化するshuffleフィルター。テンプレートでランダムなコンテンツやランダム化されたリストを表示するのに便利
- タイムスタンプを「2時間前」や「3日後」のような人間が読める相対時間文字列に変換するtime_diffフィルター。FacebookやTwitterの時間表示に似ており、Drupalの翻訳システムを通じて完全に翻訳可能
- 複数のフォーマットプリセット(none、short、medium、long、full)、カスタムロケール、タイムゾーン、カレンダータイプ(グレゴリオ暦または伝統的暦)をサポートし、PHPのIntlDateFormatterを使用して日付をフォーマットするlocalizeddateフィルター
- decimal、currency、percent、scientific、spellout、ordinal、durationを含む様々なスタイルをサポートし、設定可能な数値タイプでロケールに応じて数値をフォーマットするlocalizednumberフィルター
- 適切な通貨記号と数値フォーマットで金額を適切にローカライズされた通貨文字列としてフォーマットするlocalizedcurrencyフィルター
- オプションの区切り文字(デフォルトは「...」)で指定された長さにテキストを短縮するtruncateフィルター。切り詰め時に単語全体を保持する機能付き
- 設定可能な区切り文字で指定された行の長さでテキストを折り返すwordwrapフィルター。元の改行を保持するオプション付き
Use Cases
コンテンツへの相対タイムスタンプの表示
time_diffフィルターを使用して、絶対日付の代わりに「5分前」や「2日前」のような人間に優しい相対時間を表示します。これはソーシャル機能、コメント、アクティビティフィード、または最新性が重要なコンテンツに特に便利です。例: {{ node.created.value|time_diff }} は「3時間前に投稿」スタイルの出力を動的に更新して表示します。
コンテンツ表示順序のランダム化
shuffleフィルターを使用して、リスト内のアイテムの順序をランダム化します。これはランダムな推薦文、注目商品、またはページ読み込みごとにバリエーションが欲しいコンテンツを表示するのに便利です。例: {% for item in items|shuffle %} は毎回ランダムな順序でアイテムを反復処理します。
多言語での数値と通貨のフォーマット
localizednumberとlocalizedcurrencyフィルターを使用して、訪問者のロケールに応じて数値と価格を適切にフォーマットします。例えば、数値1234.56は英語では「1,234.56」と表示されますが、ドイツ語では「1.234,56」と表示されます。通貨フォーマットは適切な記号配置と小数点処理を保証します: {{ price|localizedcurrency('EUR', 'de_DE') }} は「1.234,56 €」と表示されます。
ロケール対応の日付フォーマット
localizeddateを使用して、異なる文化的慣習に従って日付をフォーマットします。日付は完全なロケールサポートを備えたIntlDateFormatterを使用して表示されます。例: {{ event_date|localizeddate('full', 'short', 'ja_JP') }} は完全な日付と短い時刻で日本語形式の日付を表示します。
テキスト抜粋の作成
truncateフィルターを使用して、長いコンテンツからプレビューテキストや抜粋を作成します。preserveオプションにより単語が途中で切られないことが保証されます。例: {{ body|truncate(150, true) }} は単語境界で終わる150文字の抜粋を作成します。
表示用テキストのフォーマット
wordwrapを使用して、固定幅ディスプレイ用にテキストをフォーマットしたり、特定の間隔でHTML改行を追加したりします。整形済みテキスト、コード表示、または視覚的な詩レイアウトの作成に便利です。例: {{ preformatted_text|wordwrap(80, '<br>') }}
Tips
- time_diffフィルターは自動的にDrupalの翻訳システムを使用するため、「2時間前」のような相対時間文字列は翻訳可能で、ユーザーの言語で表示されます
- 国際化フィルター(localizeddate、localizednumber、localizedcurrency)を使用する場合は、PHPインストールでintl拡張が有効になっていることを確認してください。そうでないとこれらのフィルターはランタイムエラーをスローします
- preserve=trueのtruncateフィルターは、長さ制限後の次のスペースを見つけるため、出力が指定された長さより長くなる可能性があります。厳密な長さ制限にはpreserveなしで使用してください
- localizedcurrencyを使用する場合は、異なる環境間で一貫したフォーマットを得るために、通貨コードとロケールの両方を常に指定してください
- shuffleフィルターはTraversableオブジェクトを配列に変換するため、大きなデータセットではパフォーマンスに影響がある可能性があります
- すべてのテキスト操作フィルター(truncate、wordwrap)はマルチバイト対応で、絵文字や非ラテン文字を含むUTF-8文字を正しく処理します