У розділі "Повідомлення про помилки для відображення" я можу приховати помилки (як це рекомендується для виробничих сайтів). Однак чи можна приховати помилки для всіх, окрім певної ролі?
У розділі "Повідомлення про помилки для відображення" я можу приховати помилки (як це рекомендується для виробничих сайтів). Однак чи можна приховати помилки для всіх, окрім певної ролі?
Відповіді:
Вступ: Ця відповідь спочатку була розміщена як відповідь на тему " Як придушити попередження або повідомлення про помилку для користувачів сайту? ".
Для цього можна використовувати модуль " Відключити повідомлення" . Ось цитата зі сторінки проекту:
Надає власнику сайту параметри вимкнення конкретних повідомлень, показаних кінцевим користувачам. Основна система повідомлень друпалів, запропонована drupal_set_message, є відмінним способом для модулів надсилати повідомлення кінцевим користувачам. Однак не всі власники сайтів 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>).
Тому просто оберніть м'ясо грепу простим регулярним виразом "будь-який символ": ". +", Як у:
.+Notice.+Undefined index:.+ctools_entity_form_field_content_type_render.+entity_form_field.inc.+
Отже, "підказкою" придумати правильне повідомлення - це зменшити повідомлення про помилку, яке ви хочете вловити, та поставити символи " . + ", Де це доречно.
Говорячи про скорочення, зауважте, що значення field_txt_student_id
опущено і в регулярному виразі (щоб воно НЕ залежало від назви поля).
В якості іншого прикладу припустімо, що ви хочете зафіксувати це повідомлення про помилку:
PDOException: у dblog_watchdog () (рядок 160 /home/dbuser/public_html/yoursitesname.com/modules/dblog/dblog.module).
У цьому випадку можливий регулярний вираз повинен виглядати приблизно так:
.+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.+
Ці останні два вирази, ймовірно, пригнічують занадто багато повідомлень, тому ви хочете звузити його до того, який ви шукаєте.
Також є альтернатива модуль " Кращі повідомлення ". Однак для 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 класифікує помилки.
Помилка форми така ж, як виняток із бази даних для функції повідомлень, тому якщо ви приховуєте помилки, ви також приховуєте повідомлення про помилки форми коментарів.
Я хотів би, щоб хтось довів мене неправильно, оскільки мені не вдалося домогтися приховування повідомлень про php, але одночасно показувати повідомлення про форму.
Щоб видалити повідомлення з веб-сайту Drupal, виконайте наведені нижче дії:
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
коментувати розділ, він також не відображатиметься для адміністраторів.