私はD7で多くの複雑なルールを開発しています。デバッグの理由から、Webサイト内にさまざまなメッセージ(標準Drupalメッセージ))があると非常に便利です。このために、「メッセージの表示サイトに"。
このメッセージが「Debug:」で始まる場合は、管理者の役割でのみ表示されるようにしたい。すべてのメッセージに条件を追加したくありません。それだけです。
これを達成する方法は?
注:先月、最初の「Hello world」モジュールを書いたので、サイトにカスタムモジュールがあります。このための正しいフックを見つける必要があるため、 https://api.drupal.org/api/drupal/includes%21module.inc/group/hooks/7 を調べました。しかし、これに適したフックが見つかりません。
Disable Messages モジュールを使用してください。ここにそのプロジェクトページからの引用があります:
エンドユーザーに表示される特定のメッセージを無効にするサイト所有者オプションを提供します。コアdrupal drupal_set_messageによって提供されるメッセージシステムは、モジュールがエンドユーザーにメッセージを送信するための優れた方法です。しかし、すべてのdrupalサイト所有者が熱心ではありませんdrupalコアおよびすべてのモジュールによって送信されたすべてのメッセージをユーザーに表示します。このモジュールは、サイト管理者に、エンドユーザーに表示されるメッセージをフィルタリングするかなり強力な方法を提供します。
その機能のいくつかは次のとおりです。
- 完全なテキスト文字列に完全に一致するメッセージを除外します。
- 正規表現に一致するメッセージを除外します。
- 特定のタイプのすべてのメッセージを特定のロールから非表示にする権限。
- 特定のユーザーに対してすべてのフィルタリングを無効にします。
- 特定のパスのすべてのフィルタリングを無効にします。
- 特定のパスにのみフィルタリングを適用します。
- システムをデバッグして、エンドユーザーにメッセージを表示せずにHTMLでメッセージを取得します。
Drupal 6またはDrupal 7(およびDrupal 8)のDEVバージョン)のいずれかで使用できます。
フックして前処理するDrupalメッセージ ?で説明されているように、さまざまなアプローチを使用します。
次の例では、「ノードの管理」権限のない匿名ユーザーおよびユーザーからのすべてのエラー/警告メッセージを非表示にします。独自の条件を簡単に追加して、誰にどのメッセージタイプを表示するかをフィルターで除外できます。
function mytheme_status_messages ($display = NULL) {
$output = '';
foreach (drupal_get_messages($display) as $type => $messages) {
// skip all error/warning messages for anonymous users
if (!user_is_logged_in() && ($type == "error" || $type == "warning")) { continue; }
// skip error/warning messages for users who don't have the 'administer nodes' permission
else if (!user_access('administer nodes') && ($type == "error" || $type == "warning")) { continue; }
...