[表示するエラーメッセージ]の下で、エラーを非表示にできます(本番サイトで推奨)。しかし、特定の役割以外の全員にエラーを隠すことは可能ですか?
[表示するエラーメッセージ]の下で、エラーを非表示にできます(本番サイトで推奨)。しかし、特定の役割以外の全員にエラーを隠すことは可能ですか?
回答:
序文:この回答は、最初に「サイトユーザーに対する警告またはエラーメッセージを抑制するにはどうすればよいですか?」に対する回答として投稿されました。
これには、メッセージの無効化モジュールを使用できます。プロジェクトページからの引用です:
エンドユーザーに表示される特定のメッセージを無効にするオプションをサイト所有者に提供します。drupal_set_messageが提供するコアdrupalメッセージシステムは、モジュールがエンドユーザーにメッセージを送信するための優れた方法です。ただし、すべてのdrupalサイトの所有者が、drupalコアから送信されるすべてのメッセージとすべてのモジュールをユーザーに表示したいわけではありません。このモジュールは、サイト管理者に、エンドユーザーに表示されるメッセージを除外する合理的に強力な方法を提供します。
その機能のいくつかは次のとおりです。
- 全文文字列に正確に一致するメッセージを除外します。
- 正規表現に一致するメッセージを除外します。
- 特定のタイプのすべてのメッセージを任意のロールから明確に隠す許可。
- 特定のユーザーのすべてのフィルタリングを無効にします。
- 特定のパスのすべてのフィルタリングを無効にします。
- 特定のパスにのみフィルタリングを適用します。
- エンドユーザーに表示せずにHTMLでメッセージを取得するシステムをデバッグします。
Drupal 6、Drupal 7またはDrupal 8のいずれかで利用可能。
「正規表現」機能を使用している場合は、コミュニティのドキュメントでも説明されているように、インターセプトするエラーメッセージを「キャッチ」する正規表現を使用する必要があります。
そのページの「ヒント:シンプルに保つ」の下に、次のようなすばらしいサンプルがあります。
次のような非常に簡単に見えるものに注意してください。
Notice: Undefined index: field_txt_student_id in ctools_entity_form_field_content_type_render() (line 96 of [...]entity_form_field.inc).
予想以上に多くの目に見えない文字が含まれています:
<em class="placeholder">Notice</em>: Undefined index: field_txt_student_id in <em class="placeholder">ctools_entity_form_field_content_type_render()</em> (line <em class="placeholder">96</em> of <em class="placeholder">[...]entity_form_field.inc</em>).
そのため、次のように単純な「任意の文字」正規表現で「。+」でgrepの肉をラップします。
.+Notice.+Undefined index:.+ctools_entity_form_field_content_type_render.+entity_form_field.inc.+
したがって、正しいメッセージを作成するための「手がかり」は、キャッチするエラーメッセージを縮小し、適切な場所に「。+」文字を配置することです。
縮小についてfield_txt_student_id
言えば、正規表現でもが省略されていることに注意してください(フィールド名に依存しないようにするため)。
別の例として、次のエラーメッセージをキャッチするとします。
PDOException:dblog_watchdog()で(/home/dbuser/public_html/yoursitesname.com/modules/dblog/dblog.moduleの160行目)。
この場合、可能な正規表現は次のようになります。
.+PDOException.+in dblog_watchdog().+(line 160 of.+/modules/dblog/dblog.module).+
以前に意図的にパスの一部を含めなかったことに注意してください/modules/dblog/dblog.module
(同じエラーが発生する別のサイトで再利用できるように...)。
また160
、モジュールの一部をyesまたはnoに含める必要があることにも注意してください。エラーメッセージでモジュールが少し変更されて(たとえば)lineになった161
場合、エラーはもう傍受されません。それを避けるために、もしそれがあなたが好むなら、160の部分を省略します(個人的には、最初に戻ってくるエラーを見て、それから私の正規表現を再適応します)。
正規表現が最初に機能しない場合(=メッセージがまだ表示される場合)、正規表現に誤字がある可能性があります。そのようなタイプミスを特定するには、(and を含むすべてのメッセージをキャッチするために)そのような何かを試すだけであったとしても、最初に制限の少ない正規表現を試します。PDOException
dblog_watchdog
.+PDOException.+dblog_watchdog.+
または、そのようにすることもできます(を含むすべてのメッセージをキャッチするにはPDOException
):
.+PDOException.+
これらの最後の2つの式は、おそらくあまりにも多くのメッセージを抑制します。そのため、目的の1つの式に絞り込んでください。
代替として、Better Messagesモジュールもあります。ただし、D7(この質問の目的)については、Alfaバージョンのみがあります。
in_array()関数を使用して、ユーザーロールを確認できます。テンプレートで:
<?php global $user; ?>
<?php if (!in_array('YOUR_ROLE', $user->roles)): ?>
<?php if ($messages): ?>
<div id="messages">
<?php print $messages; ?>
</div> </div>
<?php endif; ?>
<?php endif; ?>
または、前処理関数でそれを行うことができます(メッセージ変数が正しく呼び出されるかどうかはわかりませんが、アイデアを与えることができます)
function MYTHEME_preprocess_page(&$variables, $hook) {
global $user;
if (!in_array('YOUR_ROLE', $user->roles)){
// This has to be checked, could be something similar.
unset($variables['page']['content']['messages']);
}
}
Drupal Webサイトから通知を削除するには、以下の手順に従ってください。
None
すべてのエラー報告を無効にします。Errors and warnings
最も深刻な問題を表示します。All messages
すべての問題を表示し、おそらく開発者のみに役立ちます。コードを介して通知とエラーメッセージを無効にする別の方法。settings.php
ファイルに次のコードを追加します。
$conf['error_level']=0;
あなたもDrupalの設定するだけで、これらの命令は次のエラーをログに記録することができますに行くAdministration > Configuration > Development > Logging and errors
か、パスに直接移動/admin/config/development/logging
する「ディスプレイにエラーメッセージ」とセットなし。Drupalは引き続きエラーをログに記録しますが、ユーザーには表示しません。
さらに制御が必要な場合は、Disable Messages
モジュールを使用してください。
より良いメッセージモジュールを使用できます。役割ベースの構成および/または正規表現マッチングを提供して、一部の通知を除外します。
テーマでこのコードをコメントすることができます
<?php if ($messages): ?>
<div id="messages"><div class="section clearfix">
<?php print $messages; ?>
</div></div> <!-- /.section, /#messages -->
<?php endif; ?>
または、status_messagesテーマ要素がこれを提供し、template.phpに独自のテーマ関数を記述できます
MYTHEME_status_messages(&$variables){}
これは、通知および警告エラーにのみ影響する可能性があります
$messages
セクションがコメント化されている場合、管理者にも表示されません。