'오류 메시지를 표시합니다'에서 오류를 숨길 수 있습니다 (생산 사이트에 권장되는대로). 그러나 특정 역할을 제외한 모든 사람에게 오류를 숨길 수 있습니까?
'오류 메시지를 표시합니다'에서 오류를 숨길 수 있습니다 (생산 사이트에 권장되는대로). 그러나 특정 역할을 제외한 모든 사람에게 오류를 숨길 수 있습니까?
답변:
서문 :이 답변은 처음에 " 사이트 사용자에게 경고 또는 오류 메시지를 표시하지 않으려면 어떻게합니까? "에 대한 답변으로 게시되었습니다 .
이를 위해 메시지 비활성화 모듈을 사용할 수 있습니다 . 프로젝트 페이지의 인용문은 다음과 같습니다.
최종 사용자에게 표시되는 특정 메시지를 비활성화하는 사이트 소유자 옵션을 제공합니다. drupal_set_message가 제공하는 핵심 drupal 메시지 시스템은 모듈이 최종 사용자에게 메시지를 보내는 훌륭한 방법입니다. 그러나 모든 drupal 사이트 소유자가 drupal core 및 모든 모듈에서 보낸 모든 메시지를 사용자에게 보여주고 자하는 것은 아닙니다. 이 모듈은 사이트 관리자에게 최종 사용자에게 표시되는 메시지를 걸러내는 강력한 방법을 제공합니다.
그 기능 중 일부는 다음과 같습니다.
- 전체 텍스트 문자열과 정확히 일치하는 메시지를 필터링하십시오.
- 정규식과 일치하는 메시지를 필터링하십시오.
- 특정 유형의 모든 메시지를 역할에서 구체적으로 숨길 수있는 권한
- 특정 사용자에 대한 모든 필터링을 비활성화합니다.
- 특정 경로에 대한 모든 필터링을 비활성화합니다.
- 특정 경로에 대해서만 필터링을 적용하십시오.
- 최종 사용자에게 메시지를 표시하지 않고 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하십시오. 모듈에 오류 메시지에서 예를 들어 라인이되도록 약간 변경하면 161더 이상 오류를 가로 채지 않습니다. 그것을 피하기 위해 160 부분을 생략하십시오. 원하는 경우 (개인적으로 오류가 다시 오는 것을 본 다음 정규 표현식을 다시 적용하십시오).
정규식이 처음에 작동하지 않으면 (= 메시지가 여전히 표시됨) 정규식에 오타가 있기 때문일 수 있습니다. 이 (잡으려고과 같이 뭔가를 시도하는 경우에만 경우에도, 같은 오타, 덜 제한적인 정규 표현식으로 첫 번째 시도를 파악하려면 모든 메시지를 포함 PDOException하고 dblog_watchdog) :
.+PDOException.+dblog_watchdog.+
또는 (을 포함하는 모든 메시지 를 잡기 위해 PDOException) :
.+PDOException.+
이 마지막 2 개의 표현은 아마도 너무 많은 메시지를 억제 할 것이므로 나중에 그 단일 표현으로 좁히기를 원할 것입니다.
도 있습니다 더 나은 메시지 의 대안으로 모듈. 그러나 D7 (이 질문에 관한 것)의 경우 알파 버전 만 있습니다.
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 웹 사이트에서 통지를 제거하려면 다음 단계를 따르십시오.
None 모든 오류보고를 비활성화합니다.Errors and warnings 가장 심각한 문제에 표시됩니다.All messages 모든 문제를 표시하며 개발자에게만 유용합니다.코드를 통해 알림 및 오류 메시지를 비활성화하는 다른 방법입니다. settings.php파일에 다음 코드를 추가 하십시오.
$conf['error_level']=0;
다음 지침에 따라 오류 만 기록하도록 Drupal을 구성 할 수도 있습니다 Administration > Configuration > Development > Logging and errors. 경로로 이동하거나 경로로 직접 이동하여 /admin/config/development/logging"Error messages to display"를 none으로 설정하십시오 . 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섹션이 주석 처리 된 경우 관리자에게도 표시되지 않습니다.