Как получить содержимое страницы по адресу
Это может использоваться:
- Как возможность создания "прокси" (посредника) для какой нибудь страницы или для служебных целей, когда в 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, который позволяет использовать а адресах замену, что выполнять перенаправление на текущего пользователя.