Как модуль может определить, когда Drupal выводит страницу «доступ запрещен»?
Я знаю, как это сделать с Drupal 6; Мне нужно знать, как это сделать с Drupal 7.
16
Вы можете указать, какие страницы будут отображаться при возникновении ошибок 403 и 404 (администратор / настройки / отчеты об ошибках).
Я полагаю, вы можете добавить новую страницу в свой hook_menu()
, а затем установить эту страницу в качестве обратного вызова ошибки 403. Когда вы нажмете свой обратный вызов в пользовательском меню, вы знаете, что выводите страницу «Отказано в доступе»!
Я делаю это в Boost 7.x. Это не красиво, но это делает работу.
источник
В Drupal 7 функция, которая возвращает уже установленные заголовки HTTP, это drupal_get_http_header () , для которой в качестве параметра требуется имя заголовка HTTP. Глядя на код authorize_access_denied_page () и drupal_fast_404 (), становится ясно, какие значения передать этой функции.
Когда заголовок «Status» начинается с 403 , Drupal выводит страницу с отказом в доступе.
Убедитесь, что звонок
drupal_get_http_header('Status')
происходит поздно. Вызов во времяhook_init()
слишком рано, но вызов во времяhook_page_alter()
(или любой обработчик препроцессора темы) будет иметь обновленную информацию заголовка.источник
drupal_get_http_header('Status')
возвращаетсяNULL
.Ваш модуль может перехватить значение "
Default 403 (access denied) page
", которое изменяется страницей "Administer > Site configuration > Error reporting
":В
hook_enable
, используяvariable_get
/variable_set
, скопировать существующее значение для вторичных переменных и заменить переменный по собственному пути (который вы зарегистрировались с помощьюhook_menu
).измените форму «Отчет об ошибках», используя
hook_form_FORM_ID_alter
для чтения / записи вторичной переменнойЕсли вы хотите быть полностью невидимым для пользователя, вы можете позвонить на вашу страницу
drupal_goto( the_value_of_the_secondary_variable )
.В
hook_disable
, восстановите значение из вторичной переменной.И все, ваш модуль получает уведомление чистым способом (и невидимым для пользователя), когда срабатывает «Отказано в доступе».
источник
Конечно, вы могли бы использовать
get_headers()
функцию PHP ?Первым элементом в возвращенном массиве будет код ответа. Если он содержит «403», то Drupal вернул страницу «Отказано в доступе».
Я не уверен, где будет лучшее место, чтобы позвонить. Возможно
hook_exit()
, в зависимости от ваших потребностей:источник
Это самый простой способ обнаружить отказ в доступе (403) и страницу не найдена (404) в Drupal 7.
источник
Вы можете использовать модуль Панели для этого.
источник