Вы здесь

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

Как получить содержимое страницы по адресу

Это может использоваться:

  1. Как возможность создания "прокси" (посредника) для какой нибудь страницы или для служебных целей, когда в url страницы надо внести свои корректировки, а информация об объекте должна хранится в url.
  2. Или например надо использовать все преимущетсва адресов меню в друпале, при этом не плодить клоны страниц в физическом смысле.

Реальный пример из жизни: надо сохранить в адресе ссылки код пользователя, чтобы в дальнейшем его можно было использовать.
Итак. Объявляем пункт меню и указываем ссылку на метод 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, который позволяет использовать а адресах замену, что выполнять перенаправление на текущего пользователя.

Уровень: 
Версия: