Wie kann ein Modul erkennen, wenn Drupal die Seite "Zugriff verweigert" ausgibt?
Ich weiß, wie es mit Drupal 6 geht. Ich muss wissen, wie es mit Drupal 7 geht.
16
Sie können festlegen, welche Seiten angezeigt werden, wenn 403- und 404-Fehler auftreten (admin / settings / error-reporting).
Ich denke, Sie können eine neue Seite in Ihre hinzufügen hook_menu()
und diese Seite dann als 403-Fehler-Rückruf festlegen. Wenn Sie Ihren benutzerdefinierten Menü-Rückruf erhalten, wissen Sie, dass Sie die Seite "Zugriff verweigert" ausgeben!
Ich mache das in Boost 7.x. Es ist nicht schön, aber es erledigt die Arbeit.
quelle
In Drupal 7 ist die Funktion, die die bereits gesetzten HTTP-Header zurückgibt , drupal_get_http_header () , für die der HTTP- Headername als Parameter erforderlich ist. Ein Blick auf authorize_access_denied_page () und drupal_fast_404 () verdeutlicht, welche Werte an diese Funktion übergeben werden sollen.
Wenn der "Status" -Header mit 403 beginnt , gibt Drupal eine Seite aus, deren Zugriff verweigert wurde.
Stellen Sie sicher, dass der Anruf zu
drupal_get_http_header('Status')
spät kommt. Das Aufrufen währendhook_init()
ist zu früh, aber das Aufrufen währendhook_page_alter()
(oder eines beliebigen Themavorverarbeitungs-Hooks) enthält die aktualisierten Header-Informationen.quelle
drupal_get_http_header('Status')
zurückgegebenNULL
.Ihr Modul könnte den Wert von "
Default 403 (access denied) page
" abfangen, der von der Seite "Administer > Site configuration > Error reporting
" geändert wird :In
hook_enable
, mitvariable_get
/variable_set
, kopieren Sie den vorhandenen Wert auf eine sekundäre Variable und die Variable durch eigene ersetzen Pfad (die Sie verwenden registrierthook_menu
).Ändern Sie das Formular "Fehlerberichterstattung", indem Sie
hook_form_FORM_ID_alter
in die sekundäre Variable lesen / schreibenWenn Sie für den Benutzer völlig unsichtbar sein möchten, könnte Ihre Seite einen Rückruf an rufen
drupal_goto( the_value_of_the_secondary_variable )
.In
hook_disable
, den Wert wiederherstellen von den sekundären Variablen.Und das war's, Ihr Modul wird auf saubere Weise (und für den Benutzer unsichtbar) benachrichtigt, wenn "Zugriff verweigert" ausgelöst wird.
quelle
Sicherlich könnten Sie die PHP-
get_headers()
Funktion verwenden?Das erste zurückgegebene Element im Array ist der Antwortcode. Wenn es '403' enthält, hat Drupal eine Seite "Zugriff verweigert" zurückgegeben.
Ich bin mir nicht sicher, wo ich am besten anrufen kann. Wahrscheinlich
hook_exit()
, je nach Ihren Bedürfnissen:quelle
Dies ist die einfachste Methode zum Erkennen von Zugriff verweigert (403) und Seite nicht gefunden (404) in Drupal 7.
quelle
Hierfür können Sie das Modul Panels verwenden .
quelle