„Dostęp zwrotny” to funkcja wywoływana w celu sprawdzenia, czy użytkownik ma dostęp do strony. W szczególnym przypadku może to być wartość TRUE
iw takim przypadku wszyscy użytkownicy mieliby do niej dostęp; innymi słowy pozwolenie na dostęp zostanie ominięte.
Jeśli używasz nazwy funkcji dla wartości „callback access” (domyślnie jest to „user_access”), możesz także użyć „argumentów dostępu”, czyli tablicy zawierającej argumenty przekazane do funkcji wywołania zwrotnego dostępu.
Podobnie jak w przypadku innych wywołań zwrotnych menu, argumenty muszą być ciągiem lub liczbą; w przypadku, gdy jest to liczba, wartość zostanie zastąpiona wartością pobraną ze ścieżki menu. Jeśli chcesz uniknąć tej zamiany, zamiast liczby musisz użyć łańcucha; na przykład użycie "1"
jako jednego argumentu przekazanego do wywołania zwrotnego dostępu pozwoliłoby uniknąć automatycznej zamiany.
Oto kilka przykładów deklaracji zwrotnych menu używanych z podstawowych modułów Drupala. (Przykłady pochodzą z kodu Drupal 7, ale na to, na co chcę zwrócić uwagę, nie robi to żadnej różnicy).
Jest to przykład, w którym wywołanie zwrotne dostępu to user_access () .
$items['file/progress'] = array(
'page callback' => 'file_ajax_progress',
'delivery callback' => 'ajax_deliver',
'access arguments' => array('access content'),
'theme callback' => 'ajax_base_page_theme',
'type' => MENU_CALLBACK,
);
Jest to przykład, w którym wywołanie zwrotne dostępu nie jest nazwą funkcji.
$items['user'] = array(
'title' => 'User account',
'title callback' => 'user_menu_title',
'page callback' => 'user_page',
'access callback' => TRUE,
'file' => 'user.pages.inc',
'weight' => -10,
'menu_name' => 'user-menu',
);
W tym przypadku wywołaniem zwrotnym dostępu jest user_view_access (), do którego przekazywana jest nie liczba 1, ale wartość pobrana ze ścieżki menu (która w tym przypadku to „użytkownik /% użytkownik”); jest to szczególny przypadek, ponieważ funkcja otrzyma wartość zwróconą przez user_load()
.
$items['user/%user'] = array(
'title' => 'My account',
'title callback' => 'user_page_title',
'title arguments' => array(1),
'page callback' => 'user_view_page',
'page arguments' => array(1),
'access callback' => 'user_view_access',
'access arguments' => array(1),
// By assigning a different menu name, this item (and all registered child
// paths) are no longer considered as children of 'user'. When accessing the
// user account pages, the preferred menu link that is used to build the
// active trail (breadcrumb) will be found in this menu (unless there is
// more specific link), so the link to 'user' will not be in the breadcrumb.
'menu_name' => 'navigation',
);
Załóżmy, że poprzednie menu zostało zdefiniowane w następujący sposób i wywołane ze ścieżką typu „użytkownik / cześć”.
$items['user/%'] = array(
'title' => 'My account',
'title callback' => 'user_page_title',
'title arguments' => array(1),
'page callback' => 'user_view_page',
'page arguments' => array(1),
'access callback' => 'user_view_access',
'access arguments' => array(1),
// By assigning a different menu name, this item (and all registered child
// paths) are no longer considered as children of 'user'. When accessing the
// user account pages, the preferred menu link that is used to build the
// active trail (breadcrumb) will be found in this menu (unless there is
// more specific link), so the link to 'user' will not be in the breadcrumb.
'menu_name' => 'navigation',
);
W tym przypadku wywołanie zwrotne dostępu otrzymałoby jako argument wartość pobraną ze ścieżki (0 oznacza „użytkownik”, a 1 oznacza część za „użytkownikiem” i ukośnik); w tym przypadku ta wartość to „cześć”.
Aby lepiej zrozumieć te argumenty symboli zastępczych, zobacz Argumenty modułu ładującego symbole wieloznaczne . Strona dokumentacji jest oznaczona jako Drupal 6, ale to, co zostało zgłoszone, nadal obowiązuje dla Drupal 7.