Comment est-il possible pour un module de détecter quand Drupal sort la page "accès refusé"?
Je sais comment le faire avec Drupal 6; J'ai besoin de savoir comment le faire avec Drupal 7.
16
Vous pouvez définir les pages à afficher lorsque des erreurs 403 et 404 se produisent (admin / paramètres / rapport d'erreurs).
Je suppose que vous pouvez ajouter une nouvelle page dans votre hook_menu()
, puis définir cette page comme rappel d'erreur 403. Lorsque votre rappel de menu personnalisé est atteint, vous savez que vous affichez la page "accès refusé"!
Je le fais dans Boost 7.x. Ce n'est pas joli, mais cela fait le travail.
la source
Dans Drupal 7, la fonction qui renvoie les en-têtes HTTP déjà définis est drupal_get_http_header () , qui nécessite le nom d'en-tête HTTP comme paramètre. En regardant authorize_access_denied_page () , et drupal_fast_404 () Code précise les valeurs à transmettre à cette fonction.
Lorsque l'en-tête "Status" commence par 403 , Drupal génère une page d'accès refusé.
Assurez-vous que l'appel
drupal_get_http_header('Status')
arrive tard. Appeler pendanthook_init()
est trop tôt, mais l'appeler pendanthook_page_alter()
(ou tout crochet de prétraitement de thème) aura les informations d'en-tête mises à jour.la source
drupal_get_http_header('Status')
retourneNULL
.Votre module pourrait intercepter la valeur de "
Default 403 (access denied) page
" qui est modifiée par la page "Administer > Site configuration > Error reporting
":Dans
hook_enable
, en utilisantvariable_get
/variable_set
, copiez la valeur existante dans une variable secondaire et remplacez la variable par votre propre chemin (que vous avez enregistré en utilisanthook_menu
).modifier le formulaire "Rapport d'erreur" en utilisant
hook_form_FORM_ID_alter
pour lire / écrire dans la variable secondaireSi vous voulez être complètement invisible pour l'utilisateur, le rappel de votre page pourrait appeler
drupal_goto( the_value_of_the_secondary_variable )
.Dans
hook_disable
, restaurez la valeur de la variable secondaire.Et c'est tout, votre module est averti de manière claire (et invisible pour l'utilisateur) lorsque "Accès refusé" est déclenché.
la source
Vous pourriez sûrement utiliser la
get_headers()
fonction de PHP ?Le premier élément du tableau renvoyé sera le code de réponse. S'il contient '403', Drupal a renvoyé une page "accès refusé".
Je ne sais pas où serait le meilleur endroit pour l'appeler. Probablement
hook_exit()
, selon vos besoins:la source
C'est le moyen le plus simple de détecter l'accès refusé (403) et la page non trouvée (404) dans Drupal 7.
la source
Vous pouvez utiliser le module Panels pour cela.
la source