ertttert
Иногда функции обратного вызова страницы, которая отображена на путь, требуется предоставить больше информации. Прежде всего, все дополнительные части пути передаются автоматически. Изменим нашу функцию следующим образом:
function menufun_hello( $first_name = '', $last_name = '') {return t( 'Hello @first_name @last_name', array('@first_name' => $first_name, '@last_name' => $last_name)) ; }
Если теперь перейти по адресу http://example.com/?q=menufun/John/Doe
, то мы увидим на экране то, что показано на рис. 4.4.
Обратите внимание, что каждый дополнительный компонент URL передан в виде параметра функции обратного вызова. В хуке меню можно также определить аргументы обратного вызова страницы, добавив в массив $items
дополнительный ключ аргументов страницы (page arguments
). Определение аргумента страницы удобно тем, что позволяет получить больший контроль над параметрами, передаваемыми функции обратного вызова. В качестве примера модифицируем модуль menufun
, добавив в него аргументы страницы для нашего элемента меню:
function menufun_menu() { $items['menufun'] =array( 'title' => 'Greeting','page callback' => 'menufun_hello','page arguments' =>array( 'Jane', 'Doe') , 'access callback' => TRUE, 'type' => MENU_CALLBACK,) ;return $items; }
После того как Drupal выполнит все инструкции, которые явно заданы в качестве аргументов страницы, в функцию обратного вызова страницы передаются все оставшиеся аргументы страницы в виде дополнительных параметров — с помощью средства перегрузки параметров для функций в PHP. Аргументы из URL все так же видны; для обращения к ним нужно изменить сигнатуру функции обратного вызова — добавить параметры из URL. Поэтому для нашего переделанного элемента меню будет актуальна следующая сигнатура функции, где $first_name
содержит значение page arguments
), а $last_name
— значение page arguments
):
Проверим поведение элемента меню: поместимfunction menufun_hello($first_name = '', $last_name = '') {...}
http://example.com/?q=menufun/John/Doe
даст результаты, показанные на рис. 4.5 (если у вас это не получилось, значит, вы забыли перестроить меню).
Чтобы использовать переданные значения в URL, можно изменить функцию обратного вызова следующим образом:
Обновите свою версию, очистите кэш и посмотрите, что получится при переходе по адресуfunction menufun_hello( $first_name = '', $last_name = '') {return t('Hello @first_name @last_name from @from_first_name @from_last_name', Привет от array( '@first_name' => $first_name, '@last_name' => $last_name) ); }
http://example.com/?q=menufun.
Всего комментариев: 0 | |