¿Cómo es posible que un módulo detecte cuándo Drupal está generando la página "acceso denegado"?
Sé cómo hacerlo con Drupal 6; Necesito saber cómo hacerlo con Drupal 7.
16
Puede establecer qué páginas se muestran cuando se producen errores 403 y 404 (admin / settings / error-reporting).
Supongo que puede agregar una nueva página en su hook_menu()
, luego configurar esta página como la devolución de llamada de error 403. Cuando se golpea la devolución de llamada de su menú personalizado, ¡sabe que está generando la página "acceso denegado"!
Hago esto en Boost 7.x. No es bonito, pero hace el trabajo.
fuente
En Drupal 7, la función que devuelve los encabezados HTTP ya establecidos es drupal_get_http_header () , que requiere el nombre del encabezado HTTP como parámetro. Al mirar authorize_access_denied_page () , y el código drupal_fast_404 () deja en claro qué valores pasar a esa función.
Cuando el encabezado "Estado" comienza con 403 , Drupal genera una página de acceso denegado.
Asegúrate de que la llamada
drupal_get_http_header('Status')
llegue tarde. Llamar durantehook_init()
es demasiado pronto, pero llamarlo durantehook_page_alter()
(o cualquier enlace de preproceso de tema) tendrá la información de encabezado actualizada.fuente
drupal_get_http_header('Status')
devolucionesNULL
.Su módulo podría interceptar el valor de "
Default 403 (access denied) page
" que es modificado por la página "Administer > Site configuration > Error reporting
":En
hook_enable
, usandovariable_get
/variable_set
, copie el valor existente en una variable secundaria y reemplace la variable por su propia ruta (que registró usandohook_menu
).alterar el formulario "Informe de errores" usando
hook_form_FORM_ID_alter
para leer / escribir en la variable secundariaSi desea ser completamente invisible para el usuario, la devolución de llamada de su página podría llamar
drupal_goto( the_value_of_the_secondary_variable )
.En
hook_disable
, restaure el valor de la variable secundaria.Y eso es todo, su módulo recibe una notificación limpia (e invisible para el usuario) cuando se activa "Acceso denegado".
fuente
¿Seguramente podrías usar la
get_headers()
función de PHP ?El primer elemento en la matriz devuelta será el código de respuesta. Si contiene '403', Drupal devolvió una página de "acceso denegado".
No estoy seguro de dónde sería el mejor lugar para llamarlo. Probablemente
hook_exit()
, dependiendo de sus necesidades:fuente
Esta es la forma más sencilla de detectar Acceso denegado (403) y Página no encontrada (404) en Drupal 7.
fuente
Puede usar el módulo Paneles para esto.
fuente