Sitewide Alert
ブロック設定を必要とせずに、すべてのページの上部にアラートメッセージを表示する機能を提供します。
sitewide_alert
インストール
composer require 'drupal/sitewide_alert:^3.0'
composer require 'drupal/sitewide_alert:^2.2'
概要
Sitewide Alertは、Drupalサイトのすべてのページに目立つアラートメッセージを表示できる包括的なモジュールです。ブロックベースのソリューションとは異なり、テーマの設定に関係なく、アラートは自動的にすべてのページの上部にレンダリングされます。
このモジュールは、完全なリビジョン管理、翻訳サポート、およびフィールド追加機能を備えたカスタムコンテンツエンティティタイプを提供します。アラートは特定の期間に表示されるようにスケジュール設定でき、訪問者が非表示にすることもでき(localStorageで永続化)、ページパスパターンでフィルタリングすることもできます。複数のアラートを設定可能な順序で同時に表示できます。
パフォーマンス最適化のため、モジュールはクライアントサイド(JavaScript AJAX)とサーバーサイドの両方のレンダリングモードを提供します。クライアントサイドアプローチはキャッシュに優しく、デフォルトです。JavaScriptが望ましくない場合は、サーバーサイドレンダリングも利用できます。モジュールには、ページをリロードせずに新しいアラートを表示するための自動更新機能が含まれています。
Features
- ブロック設定なしでページ上部に自動レンダリング
- 昇順/降順の表示順序を持つ複数の同時アラート
- 管理設定による設定可能なビジュアルスタイル(色/外観)
- ブラウザごとのlocalStorage永続化によるオプションの訪問者非表示機能
- ワイルドカードサポート付きのパスベースの表示制限
- 開始・終了日時範囲によるスケジュールアラート
- サーバーサイドまたはクライアントサイド(AJAX)レンダリングオプション
- 翻訳機能による完全な多言語サポート
- コンテンツのバージョン管理とロールバック用のリビジョン管理
- カスタムフィールド追加を可能にするフィールド追加可能なエンティティ
- リアルタイムアラート更新のための自動更新ポーリング
- CLIベースのアラート管理用Drushコマンド
- マルチサイト設定用サブモジュールによるDomainモジュール連携
- テーマ制御用サブモジュールによるブロック配置オプション
Use Cases
計画メンテナンス通知
計画メンテナンスの24時間前にアラートが表示されるようにスケジュールします。訪問者に通知を見せたい時を開始日に、メンテナンス開始時を終了日に設定します。注目を集めるために「warning」のような目立つスタイルを使用します。アラートは手動操作なしで自動的に表示・消去されます。
フラッシュセール告知
プロモーションイベント用の期間限定アラートを作成します。正確な開始/終了時間でスケジュールを有効にします。リピーター訪問者が繰り返し煩わされないように非表示可能にします。コンテンツ更新後にアラートを再表示する必要がある場合は、非表示リセット機能を使用します。
緊急サイト通知
コマンドラインからDrushを使用してスケジュールなしのアラートを素早く作成: drush sitewide-alert:create 'Emergency' 'We are experiencing issues. Thank you for patience.' --style=danger。解決したらdrush sitewide-alert:disableで無効化します。
ページ固有の情報
パスパターンを使用して特定のページにのみアラートを表示します。例えば、配送遅延通知を/cartと/checkout/*ページにのみ表示したり、部門固有のお知らせを/department/sales/*パスに表示したりできます。
マルチドメインのお知らせ
domainサブモジュールを使用して、マルチサイト設定で特定のドメインにのみ表示されるアラートを作成します。ドメイン固有のセール、地域のお知らせ、ブランド固有のメッセージングに便利です。
高トラフィックサイトの最適化
積極的なページキャッシュを使用するサイトでは、server_side_renderを無効のまま(デフォルト)にします。アラートはフルページキャッシュを妨げないJavaScript AJAXコール経由で読み込まれます。アラートの変更がどれだけ早く伝播する必要があるかに基づいてcache_max_ageを調整します。
Tips
- 時間に敏感なアラートには自動更新機能を使用 - 訪問者はページリロードなしで更新を見ることができます
- スケジュールされたアラートの場合、実際のメンテナンスより少し前に終了時間を設定し、訪問者にアクションを完了する時間を与えます
- 複数のアラートスタイルを作成(例: info|情報、warning|警告、danger|緊急)してアラートの重大度を視覚的に区別します
- ブロックサブモジュールを使用すると、ブロックレイアウトによるアラート配置の完全な制御が得られますが、自動的なpage_top配置は失われます
- 開発/ステージング環境では、管理UIにアクセスせずにDrushコマンドを使用してテストアラートを素早く作成できます
- 非表示機能はブラウザのlocalStorageを使用します - アラートUUIDを保存するため、GDPR準拠を考慮してください
- パス表示はワイルドカード(*)をサポートしますが、パスの末尾でのみ - /blog/* は動作しますが、*/edit は動作しません
- サーバーサイドレンダリングは非JavaScriptユーザーのアクセシビリティを向上させますが、キャッシュの効果が低下する可能性があります
Technical Details
Admin Pages 3
/admin/config/sitewide_alerts
ビジュアルスタイル、表示順序、キャッシュ動作、レンダリングモードを含む、サイト全体アラートのグローバル設定を行います。
/admin/content/sitewide_alert
サイト全体アラートエンティティの一覧表示、作成、編集、削除。ステータス、スケジュール、表示設定を含むすべてのアラートの概要を表示します。
/admin/content/sitewide_alert/{sitewide_alert}
サイト全体アラートのコンテンツ、スケジュール、表示、非表示オプションを作成・変更するための編集フォーム。
権限 10
Hooks 4
hook_theme
アラートエンティティをレンダリングするためのsitewide_alertテーマフックを定義します。
template_preprocess_sitewide_alert
エンティティデータ、スタイリング、非表示可能性を含むsitewide-alert.html.twigテンプレート用の変数を準備します。
hook_theme_suggestions_sitewide_alert
スタイルと非表示可能性に基づいたサイト全体アラートテンプレートのテーマサジェスチョンを提供します。
hook_page_top
page_topリージョンにサイト全体アラートのレンダー配列を挿入します。sitewide_alert_blockサブモジュールが有効な場合はスキップされます。
Drush Commands 4
drush sitewide-alert:create
コマンドラインから新しいサイト全体アラートを作成します。
drush sitewide-alert:delete
ラベルに一致するサイト全体アラートを削除します。
drush sitewide-alert:disable
サイト全体アラートを無効化(非公開)にします。引数なしの場合、すべてのアラートを無効化します。
drush sitewide-alert:enable
サイト全体アラートを有効化(公開)します。
Troubleshooting 6
アラートが「アクティブ」(公開済み)に設定されていることを確認します。スケジュールが有効で現在時刻がスケジュール範囲内かチェックします。匿名ユーザーが「view published sitewide alert entities」権限を持っていることを確認します。サーバーサイドレンダリングを使用している場合は、Drupalキャッシュをクリアします。
非表示状態はブラウザのlocalStorageに保存されます。ユーザーがブラウザデータをクリアすると、非表示がリセットされます。意図的に非表示をリセットする(例: アラートコンテンツ更新後)には、アラートを編集して「以前の非表示を無視」をチェックし保存します。
クライアントサイドレンダリング(デフォルト)では、アラートはrefresh_interval設定(デフォルト15秒)に基づいて更新されます。即座の更新には、cache_max_ageを減らすか、ユーザーにハードリフレッシュを依頼します。サーバーサイドレンダリングでは、Drupalキャッシュをクリアします。
デフォルトでは「管理ページに表示」は無効です。アラートが管理ページに表示されるべきでない場合は、/admin/config/sitewide_alertsで設定を確認してください。
JavaScriptの競合がないことを確認します。モジュールはcore/once、core/drupal、core/drupalSettingsライブラリを必要とします。ブラウザコンソールで特定のエラーを確認します。/sitewide_alert/loadエンドポイントが有効なJSONを返すことを確認します。
パスパターンは/で始まる必要があります。*はワイルドカードとして末尾でのみ使用できます(例: /products/*)。言語プレフィックス付きパスの場合、プレフィックスを含めるかワイルドカードを使用します。「否定」オプションはロジックを反転させます(リストされたページを除くすべての場所に表示)。
Security Notes 4
- 「administer sitewide alert」と「administer sitewide alert entities」権限は、サイト全体のメッセージングを完全に制御できるため、信頼された管理者にのみ付与すべきです
- アラートメッセージコンテンツはHTMLをサポートします - XSSを防ぐため、信頼されたユーザーのみがアラートを作成/編集できるようにしてください
- AJAXエンドポイント /sitewide_alert/load は「view published sitewide alert entities」権限を尊重します
- localStorageに保存される非表示データにはアラートUUIDとタイムスタンプのみが含まれ、機密情報は含まれません