Если обычного роутинга по прямым ссылкам вам уже мало и хочется чего то большего, то представляем вайлдкарды (ох уж эти аглицизмы), а точнее – динамическая подстановка/замена аргументов в роутинге. Базовые знания по меню и роутинга друпала можно почерпнуть ТУТ.
Сделано это, как и все что делается в программировании, для уменьшения рутины. А именно – если в роутинге передается код какого-либо объекта, то мы могли в своем обработчике использовать уже подготовленные объект. А теперь на примере, т.к. так информация усваивается гораздо лучше. У нас есть путь 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. На практике же мне еще не доводилось сталкиваться с необходимостью ее использовать.
Если вам необходимо передать числовой аргумент, то тут есть нюанс. Т.к. если использовать число, то в качестве аргумента будет использован аргумент из роутинга. Передать число можно с помощью следующих способов:
- Обернуть в кавычки, чтобы привести к строковому типу: '5'
- Выполнить явное приведение типа (также для констант и переменных): (string) 5
Полезные ссылки (внимание, много английских букв):
Add new comment