Ich habe implementiert hook_menu()
, um einen neuen Pfad namens "Benutzeranmeldung" zu erstellen. Die Seitenrückruffunktion empfängt URL-Parameter wie $_GET['parameter']
; Wenn ich jedoch zu http://site.com/user-login?parameter=test gehe, wird ein 404-Fehler angezeigt. Wie soll ich implementieren hook_menu()
, damit dies funktioniert?
Dies ist der Code, den ich verwende
/**
* Implementation of hook_menu()
*/
function login_menu() {
//$items = array();
$items['user-login'] = array(
'title' => 'External login',
'page callback' => 'user_login_callback',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function user_login_callback() {
// Get the URL params
$uid = urldecode($_GET['uid']);
$expiry = urldecode($_GET['expiry']);
$provided_hash = urldecode($_GET['hash']);
}
Die Seite würde wie http://site.com/user-login?uid=2?expiry=3?hash=sd7wdah heißen
hook_menu()
?Antworten:
Das Drupal-Menüsystem kümmert sich nicht um $ _GET-Argumente, Sie können mit ihnen machen, was Sie wollen, es hat keinen Einfluss auf die Implementierung von hook_menu () **.
Der Fehler liegt also woanders. Das Ergebnis von hook_menu () wird gespeichert und nicht auf jeder Seite aufgerufen. Wenn Sie in dieser Funktion etwas ändern / hinzufügen, müssen Sie die Menüs neu erstellen. Der schnellste Weg, dies zu tun, ist die Verwendung des Befehls "drush cc all" oder "Menüs neu erstellen" im Entwicklungslinkblock von devel.module. Sie können die Modulseite jedoch auch einreichen.
** Es ist jedoch weitaus üblicher, Argumente als zusätzliche Pfadargumente über das Menüsystem zu übergeben. Alles, was nach dem Pfad übergeben wird, wird automatisch als Argument an Ihren Seitenrückruf übergeben. Wenn Sie also user-login / 2/3 / sd7wdah aufrufen, werden diese drei Argumente an Ihre Funktion als user_login_callback (2, 3, 'sd7wdah') übergeben. Sie können diese Argumente auch erforderlich machen, indem Sie den Pfad wie folgt in hook_menu (): angeben
user-login/%/%/%
und die Pfadargumente wie folgt definieren :'path arguments' => array(1, 2, 3),
. Dadurch wird sichergestellt, dass Ihre Funktion nur mit diesen drei Argumenten aufgerufen werden kann und dass sie nicht optional sind.quelle
Nur zur Klarheit,
http://site.com/user-login?uid=2?expiry=3?hash=sd7wdah
wird nicht funktionieren, sollte es sein:
http://site.com/user-login?uid=2&expiry=3&hash=sd7wdah
Beachten Sie, wie es nur ein "?" und jeder zusätzliche Parameter wird durch "&" getrennt
quelle