page_example_menu
- Drupal 5
- Drupal 6
developer/examples/page_example.module, строка 65
- Версии
- 5
page_example_menu(
$may_cache)- 6
page_example_menu()
Реализация hook_menu()
.
Вам необходимо реализовать hook_menu()
, чтобы разместить свои страницы в системе
меню Друпала. Это дает Друпалу понять, какая функция (page callback) формирует
контент по заданному URL-у.
Приведенные ниже определения элементов меню интерпретируются следующим образом:
Если пользователь посетит страницу http://example.com/foo
, система меню ищет
функцию, которая соответствует адресу 'foo'
. В данном случае, page_example_foo.
Затем система меню проверит, есть ли у пользователя разрешение 'access foo'
, и
лишь потом, если у пользователя есть это разрешение, система меню запустит
фукцию page_example_foo()
и выведет ее результат.
Если пользователь посетит страницу http://example.com/bar
, соответствия в
системе меню не будет найдено и будет возвращена страница 404.
Если пользователь посетит страницу http://example.com/bar/baz/hello/123
, система
меню в первую очередь поищет точное соответствие с 'bar/baz/hello/123'
. Не найдя его,
она попытается поискать соответствие с 'bar/baz/hello/%'
(где "процентик" может
быть равен любому значению, кроме слеша или быть пустым). Не найдя и такого,
она продолжит с 'bar/baz/%/123'
. Опять не найдя, попробует 'bar/baz/%/%'
, и здесь
уже найдет наш элемент меню с коллбеком page_example_baz()
. При этом, обратите
внимание на аттрибут 'page arguments'
, который определяет какие данные следует
передать в 'page callback'
. Цифры означают индексы составных частей адреса
между слешами. В конечном итоге, мы вызовем page_example_baz('hello'
, 123).
Это является основным методом передачи параметров элементу меню через адрес
страницы в системе меню Друпала.
Примечательно также, что если пользователь посетит страницу http://example.com/bar/baz
,
соответствие тоже будет найдено (page_example_baz). Резонный вопрос — почему,
ведь в определении элемента меню прописан не совсем такой путь? Однако,
все просто — "процентики" не обязывают присутствие данных в них.
Ну и конечно же, перед запуском и отдачей page_example_baz()
, пройдет проверка
разрешения 'access baz'
.
Код
<?php
function page_example_menu() {
// This is the minimum information you can provide for a menu item.
$items['foo'] = array(
'title' => 'Foo',
'page callback' => 'page_example_foo',
'access arguments' => array('access foo'),
);
// By using the MENU_CALLBACK type, we can register the callback for this
// path but not have the item show up in the menu; the admin is not allowed
// to enable the item in the menu, either.
//
// Notice that the 'page arguments' is an array of numbers. These will be
// replaced with the corresponding parts of the menu path. In this case a 0
// would be replaced by 'bar', a 1 by 'baz', and like wise 2 and 3 will be
// replaced by what ever the user provides. These will be passed as arguments
// to the page_example_baz() function.
$items['bar/baz/%/%'] = array(
'title' => 'Baz',
'page callback' => 'page_example_baz',
'page arguments' => array(2, 3),
'access arguments' => array('access baz'),
'type' => MENU_CALLBACK,
);
return $items;
}
?>
вместо % может быть не только число, а что угодно. аргументы нумеруются с 0, т.е.
Однако, все просто — "процентики" не обязывают присутствие данных в них. --- Однако, не работает.Никто не в курсе в чём проблемма?
Перевод вроде верный.Но тем не менее, без данных в % - страница не найдена.