web-dev-qa-db-ja.com

「Debug:」で始まるメッセージを管理者のみに表示する方法は?

私はD7で多くの複雑なルールを開発しています。デバッグの理由から、Webサイト内にさまざまなメッセージ(標準Drupalメッセージ))があると非常に便利です。このために、「メッセージの表示サイトに"。

このメッセージが「Debug:」で始まる場合は、管理者の役割でのみ表示されるようにしたい。すべてのメッセージに条件を追加したくありません。それだけです。

これを達成する方法は?

:先月、最初の「Hello world」モジュールを書いたので、サイトにカスタムモジュールがあります。このための正しいフックを見つける必要があるため、 https://api.drupal.org/api/drupal/includes%21module.inc/group/hooks/7 を調べました。しかし、これに適したフックが見つかりません。

5
Justme

オプション1:メッセージの無効化モジュールを使用する

Disable Messages モジュールを使用してください。ここにそのプロジェクトページからの引用があります:

エンドユーザーに表示される特定のメッセージを無効にするサイト所有者オプションを提供します。コアdrupal drupal_set_messageによって提供されるメッセージシステムは、モジュールがエンドユーザーにメッセージを送信するための優れた方法です。しかし、すべてのdrupalサイト所有者が熱心ではありませんdrupalコアおよびすべてのモジュールによって送信されたすべてのメッセージをユーザーに表示します。このモジュールは、サイト管理者に、エンドユーザーに表示されるメッセージをフィルタリングするかなり強力な方法を提供します。

その機能のいくつかは次のとおりです。

  • 完全なテキスト文字列に完全に一致するメッセージを除外します。
  • 正規表現に一致するメッセージを除外します。
  • 特定のタイプのすべてのメッセージを特定のロールから非表示にする権限。
  • 特定のユーザーに対してすべてのフィルタリングを無効にします。
  • 特定のパスのすべてのフィルタリングを無効にします。
  • 特定のパスにのみフィルタリングを適用します。
  • システムをデバッグして、エンドユーザーにメッセージを表示せずにHTMLでメッセージを取得します。

Drupal 6またはDrupal 7(およびDrupal 8)のDEVバージョン)のいずれかで使用できます。

オプション2:カスタムコードを作成する

フックして前処理する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; }

    ...
10
Pierre.Vriens