Это может использоваться:
- Как возможность создания "прокси" (посредника) для какой нибудь страницы или для служебных целей, когда в url страницы надо внести свои корректировки, а информация об объекте должна хранится в url.
- Или например надо использовать все преимущетсва адресов меню в друпале, при этом не плодить клоны страниц в физическом смысле.
Реальный пример из жизни: надо сохранить в адресе ссылки код пользователя, чтобы в дальнейшем его можно было использовать.
Итак. Объявляем пункт меню и указываем ссылку на метод mymodule_page, который будет проксировать данные.
function mymodule_menu() {
$items = array();
$items['user/%user/mymodule-page'] = array(
'title' => 'Catalog',
'page callback' => 'mymodule_page',
'page arguments' => array(1),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
return $items;
}В качестве wildcard (аргумента подстановки) мы указываем %user, таким образом в методе мы получим и сможем использовать не просто ID пользователя, а уже загруженный объект. Еще об аргументах подстановки (wildcard) в адресе меню. Вот простой пример как мы можем использовать данные:
function mymodule_page($account) {
global $user;
if (mymodule_access($account)) {
$catalog = menu_execute_active_handler('some-useful-page', FALSE);
}
else {
drupal_goto('<front>');
}
return $catalog;
}В методе mymodule_access мы можем определить свои права доступа к странице
Второй параметр в menu_execute_active_handler показывает, что содержимое надо вернуть в вызывающую процедуру, вместо того чтобы выполнить непосредственно в данный момент.
На странице some-useful-page может выводиться блок, который будет подтягивать данные об активном пользователе из ссылки в меню. Например:
global $user;
if (arg(0) == 'user' && arg(1) != 'me' && is_numeric(arg(1)) && ($user->uid == arg(1) || user_access('<правило_доступа_разрешающее_просмотр_чужих_данных>'))) {
$account = user_load(arg(1));
}
else {
$account = $user;
}
В данном примере me - это аргумент который используется в одноименном модуле me, который позволяет использовать а адресах замену, что выполнять перенаправление на текущего пользователя.

Добавить комментарий