You are here

Друпал, Меню и Wildcard или динамическая замена аргументов в меню

Если обычного роутинга по прямым ссылкам вам уже мало и хочется чего то большего, то представляем вайлдкарды (ох уж эти аглицизмы), а точнее – динамическая подстановка/замена аргументов в роутинге. Базовые знания по меню и роутинга друпала можно почерпнуть ТУТ.

Сделано это, как и все что делается в программировании, для уменьшения рутины. А именно – если в роутинге передается код какого-либо объекта, то мы могли в своем обработчике использовать уже подготовленные объект. А теперь на примере, т.к. так информация усваивается гораздо лучше. У нас есть путь node/23/edit, которые открывает на редактирование материал 23. Но у нас есть еще node/23/view, node/23/delete, да и мало ли чего мы можем сделать с этим материалом. И вот чтобы каждый раз не выполнять node_load, существует следующий метод.

Определяем пункт меню node/%node/edit. Тогда в указанном page callback мы можем использовать объект $node. При условии что в качестве page arguments мы выставим array(1).

Краткое и интересное введение прошли. Теперь распишем нудные определения. Плясать будем от следующего примера

$items['myobject/%myobject/edit'] = array(
  'page callback' => 'mymodule_object_edit',
  'page arguments' => array('myargument', 1),
);

По сути выполнится команда

mymodule_object_edit('myargument', myobject_load(arg(1));

Вот. Это и есть ключ к пониманию автозамены аргументов. %wildcard будет превращен в wildcard_load.

Еще упомяну, что помимо %wildcard_load есть и %wildcard_to_arg. В качестве примера можно глянуть user_uid_optional_to_arg. На практике же мне еще не доводилось сталкиваться с необходимостью ее использовать.

Если вам необходимо передать числовой аргумент, то тут есть нюанс. Т.к. если использовать число, то в качестве аргумента будет использован аргумент из роутинга. Передать число можно с помощью следующих способов:

  1. Обернуть в кавычки, чтобы привести к строковому типу: '5'
  2. Выполнить явное приведение типа (также для констант и переменных): (string) 5

Полезные ссылки (внимание, много английских букв):

 

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

Add new comment