Config Pages
メニューシステムの任意の場所に配置可能なフィールド付き設定エンティティを提供し、言語、ドメイン、またはカスタムコンテキストに対応したコンテキスト認識機能をサポートします。
config_pages
インストール
composer require 'drupal/config_pages:8.x-2.19'
概要
Config Pagesは、DrupalのField APIを使用してカスタム設定ページを作成する強力な方法を提供します。Form APIでカスタムフォームを書く代わりに、ファイルアップロード、エンティティ参照、複数値のドラッグ&ドロップ、AJAXインタラクションなど、エンティティフィールドの完全な機能を活用できます。
このモジュールは設定値を保存するフィールド付きコンテンツエンティティを作成し、その構造はconfig entity bundleによって定義されます。各config pageタイプはメニューシステムの任意のパスにマウントでき、コンテキスト認識が可能です。つまり、現在の言語、ドメイン、または任意のカスタムコンテキストプラグインに基づいて異なる値を保存できます。
このモジュールは、ホームページ、サイト全体の設定、複雑なカスタム設定フォームの置き換えなど、シングルトンページの作成に最適です。Token連携、Views連携をサポートし、プログラムで値を管理するためのDrushコマンドを提供します。
Features
- DrupalのField APIを使用したフィールド付きエンティティ - テキスト、画像、エンティティ参照、Paragraphsなど、あらゆるフィールドタイプを追加可能
- config pageを任意のメニューパス(例:/admin/config/mysettings)にマウントし、適切なパンくずリストとメニュー階層を設定
- 現在の言語やドメインに基づいて異なる設定値を持てるコンテキスト認識システム
- 言語やドメイン以外のカスタムコンテキストタイプを作成するための拡張可能なコンテキストプラグインシステム
- コンテキスト固有の設定が存在しない場合にデフォルト値を使用するコンテキストフォールバック機構
- config pageのフィールド値を置換トークンとして公開するToken連携
- config pageのコンテンツをサイトの任意の場所に表示するためのBlockプラグイン
- config pageのフィールド値に基づいてBlock/要素の表示を制御するVisibility conditionプラグイン
- コンテキスト対応クエリのためのargument defaultプラグインを含むViews連携
- テンプレートで直接config pageフィールドをレンダリングするためのTwig関数
- フィールド値をプログラムで取得・設定するためのDrushコマンド
- config page値を管理するためのDrupal Consoleコマンド
- 異なるコンテキスト間でフィールド値をコピーするインポート機能
- すべてのフィールドをデフォルトにリセットする値クリア機能
- config pageタイプごとの表示・編集アクセスのきめ細かいパーミッション
- 表示されたBlockからの素早い編集のためのContextual links
- フィールド、表示モード、フォーム設定を管理するための完全なField UI連携
Use Cases
ホームページ設定
ホームページのヒーローバナー、おすすめコンテンツ参照、プロモーションテキスト、コールトゥアクションボタン用のフィールドを持つconfig pageタイプを作成します。コンテンツ編集者は開発者の介入なしにホームページ要素を更新でき、画像、WYSIWYGテキスト、エンティティ参照用のなじみのあるフィールドウィジェットを使用できます。
グローバルサイト設定
ソーシャルメディアリンク、会社の連絡先情報、フッターの著作権テキスト、アナリティクストラッキングコード用のフィールドを含むconfig pageでカスタム設定フォームを置き換えます。/admin/config/site-settingsにマウントしてアクセスしやすくし、Token公開を有効にしてサイト全体で値を使用できるようにします。
多言語設定
言語コンテキストを有効にして、言語ごとに異なるプロモーションコンテンツ、法的テキスト、または地域情報を保存します。システムは現在のサイト言語に基づいて適切なconfig pageを自動的に読み込み、翻訳が存在しない場合はデフォルト言語にフォールバックします。
おすすめコンテンツのキュレーション
Viewsによるオートコンプリートを備えたエンティティ参照フィールドを使用したconfig pageでNodequeueを置き換えます。編集者はドラッグ&ドロップで順序付けしながらおすすめ記事、製品、メディアアイテムをキュレーションでき、選択インターフェースにはViewsフィルタリングのすべての機能を利用できます。
条件付きBlock表示
ConfigPageフィールド値の表示条件を使用して、config page設定に基づいてBlockの表示/非表示を制御します。例えば、'show_promo'ブールフィールドが有効な場合のみプロモーションバナーを表示し、コンテンツ管理者がサイト全体の機能を切り替えられるようにします。
テンプレート連携
config_pages_field() Twig関数を使用して、テーマテンプレートで直接config pageフィールドをレンダリングします。例えば、{{ config_pages_field('footer_settings', 'field_copyright_text') }}はBlockなしでfooter.html.twigに著作権テキストをレンダリングします。
Tips
- カスタムコードでconfig_pages_config()ヘルパー関数を使用してタイプでconfig pageを簡単に読み込み: $config = config_pages_config('my_settings');
- プログラムでの値取得には、config_pages.loaderサービスを使用: \Drupal::service('config_pages.loader')->getValue('my_settings', 'field_name', 0, 'value');
- ConfigPagesContextBaseを拡張してPlugin/ConfigPagesContextディレクトリに配置することでカスタムコンテキストプラグインを作成可能
- Config pageタイプとそのフィールド設定はDrupalの構成管理経由でエクスポート可能ですが、実際のコンテンツ(フィールド値)はコンテンツエンティティとして保存されます
- config pagesでエンティティ参照フィールドを使用する場合、強力なフィルタリング機能のためにViews選択付きのオートコンプリートウィジェットを有効にします
- Twig関数config_pages_field()は自動的にキャッシュを処理し、config pageが存在しない場合は適切なキャッシュタグを持つ空のrender arrayを返します
Technical Details
Admin Pages 4
/admin/structure/config_pages
すべてのconfig pageタイプをコンテキスト設定とToken公開ステータスとともに一覧表示する概要ページ。ここから任意のconfig pageに素早くアクセスして編集できます。
/admin/structure/config_pages/types
config pageタイプ定義を管理する管理ページ。利用可能なすべてのタイプをコンテキスト設定とともに一覧表示し、編集、削除、フィールド管理へのアクセスを提供します。
/admin/structure/config_pages/types/add
メニューパス、コンテキスト設定、Token設定を含む新しいconfig pageタイプを作成するフォーム。
/admin/structure/config_pages/{config_pages_type}/edit
ユーザーが設定値を入力する実際のconfig pageフォーム。設定されたすべてのフィールドを表示し、保存、値のクリア、他のコンテキストからのインポートが可能です。
権限 9
Hooks 2
hook_config_pages_contexts_info_alter
モジュールが利用可能なコンテキストプラグインのリストを変更することを許可
hook_config_pages_functions_alter
モジュールとテーマがconfig_pages拡張にカスタムTwig関数を追加することを許可
Drush Commands 2
drush config:pages-set-field-value
config pageのフィールドに値を設定
drush config:pages-get-field-value
config pageからフィールドの値を取得
Troubleshooting 4
指定したメニューパスが既存のルートと競合しています。別のパスを選択するか、競合するルートを削除/変更してください。
config pageタイプでコンテキストプラグインが適切に有効になっていることを確認します。現在のコンテキストに対してconfig pageエンティティが存在するか確認します。値がデフォルトにフォールバックすべき場合はフォールバック設定を確認します。
config pageタイプフォームで「このConfigPageの値をTokenとして公開」チェックボックスが有効になっていることを確認します。有効化後にキャッシュをクリアしてください。
config pageエンティティが存在する(少なくとも一度保存されている)ことを確認します。表示モードの「表示を管理」でフィールドが設定されているか確認します。ユーザーがconfig pageタイプの「表示」パーミッションを持っているか確認します。
Security Notes 4
- パーミッションはきめ細かく設定されています - すべてのタイプへのアクセスを付与する「edit config_pages entity」ではなく、特定のタイプに対して「edit [type] config page entity」を割り当ててください
- 「administer config_pages types」パーミッションは、新しいconfig pageタイプの作成やフィールド設定の変更を含む大きな権限を付与します - 慎重に割り当ててください
- フィールド値は出力時に自動的にサニタイズされません - 適切なフィールドフォーマッターを使用し、Drupalのレンダーシステムのベストプラクティスに従ってください
- 「access config_pages clear values option」パーミッションはユーザーがすべてのフィールド値をリセットできるようにします - 誤用するとデータ損失につながる可能性があります