Чистые URL-адреса Drupal на пользовательской странице GET-запрос

У меня есть страница drupal (страница типа контента), которая должна принимать значения GET с использованием чистых URL-адресов.

Я помещаю следующий код в тело страницы, используя формат ввода кода php.

<?php
  $uid = $_GET['uid'];
  $user = user_load($uid);
  print $user->name;
?>

Теперь следующая ссылка http://www.example.com/mypath/?uid=5 приводит к отображению имени пользователя 5. Здорово.

Мой вопрос: можно ли это сделать с помощью чистых URL-адресов, таких как http://www.example.com/mypath/5 имеет тот же результат? (Аналогично использованию аргументов в представлениях)


person draenen    schedule 14.04.2010    source источник
comment
Используйте example.com для примера URL   -  person Greg    schedule 14.04.2010


Ответы (3)


Вы можете делать то, что вы просите в системе меню, используя hook_menu в модуле, но вы не можете создать псевдоним, частью которого является имя. Весь псевдоним является именем, поэтому вы не можете извлечь из него информацию. Используя hook_menu вы можете сделать это:

function my_module_menu() {
  $items = array();

  $items['path/%user'] = array(
    'title' => 'Title',
    'page callback' => 'callback',
    'page arguments' => array(1),
    'access callback' => '...',
    'access arguments' => array(...),
  );

  return $items;
}

Затем в вашей функции обратного вызова у вас будет значение или аргумент 1 в пути, который соответствует uid (на самом деле это будет загруженный пользовательский объект из-за %user).

person googletorp    schedule 14.04.2010

да. Используйте arg() вместо $_GET

Имейте в виду, что arg() по умолчанию использует $_GET['q'] и поэтому эффективно преобразует псевдоним перед возвратом результата. Таким образом, параметр, к которому вы пытаетесь получить доступ, может находиться в другой позиции.

Например, путь myalias/5 может трансформироваться в таксономию/термин/5. В этом случае arg(2) равно 5.

Для получения дополнительной информации о функции Drupal arg() см. http://api.drupal.org/api/function/arg/6

person Markus Sandy    schedule 15.04.2010
comment
Хорошая идея. Однако api.drupal.org/api/function/arg/6 отмечает что использование arg() менее читаемо, чем обратный вызов меню, предложенный googletorp. Я попробую оба способа и посмотрю, какой работает лучше. - person draenen; 15.04.2010

Если вы используете Views для сборки этих страниц, эту часть можно легко сделать за вас, указав UID в качестве аргумента, предоставленного в URL-адресе.

person Kevin    schedule 14.04.2010