С hook_menu начинается большинство модулей. Именно этот хук отвечает за роутинг, а если простым языком, то определяет по каким ссылкам в адресной строке что должно открываться/выводиться.
Подробны hook_menu выглядит следующим образом (перечислены все возможные параметры):
function hook_menu () { $items['abc/def'] = array( 'title' => 'Route title', 'title callback' => 'mymodule_title_callback', 'title arguments' => array(1, 'abc'), 'description' => 'Detail description what page do' 'page callback' => 'mymodule_abc_view', 'page arguments' => array(1, 'dfg'), 'delivery callback' => 'drupal_deliver_html_page', 'access callback' => 'user_access', 'access arguments' => array('access administration pages'), 'theme callback' => 'mymodule_get_active_theme_name', 'theme arguments' => array(1, 'hij'), 'file' => 'includes/mymodule.admin.inc', 'file path' => drupal_get_path('module', 'mymodule'), 'load arguments' => array(1), 'weight' => 0, 'menu_name' => 'navigation', 'expanded' => TRUE, 'context' => MENU_CONTEXT_PAGE, 'tab_parent' => 'abc', 'tab_root' => 'abc', 'position' => 'left', 'type' => MENU_NORMAL_ITEM, 'options' => array(), ); return $items; }
Если мы не хотим чтобы наш новый пункт попадал в меню, то необходимо в качестве type указать MENU_CALLBACK. Для создания вкладок используется MENU_LOCAL_TASK и MENU_DEFAULT_LOCAL_TASK. Если необходимо создать пункт-действие (как то добавление нового чего то), то можно указать MENU_LOCAL_ACTION. Если надо чтобы пункт добавился в меню, но был выключен по умолчанию, то используем MENU_SUGGESTED_ITEM
Если пункт меню используется для возвращения контента без обертки страницы (например для результатов ajax запроса), то в delivery callback можно прописать ajax_deliver, вместо определения своего метода.
Довольно обширный список. Описание всех параметров выйдет за рамки данной статьи. Большинство параметров являются экзотическими и используются только в редких случаях. Как правило, стандартное определение меню выглядит следующим образом
function mymodule_menu () { $items['admin/config/mymodule'] = array( 'title' => 'Mymodule configuration page', 'description' => 'Set configuration parameters for mymodule' 'page callback' => 'drupal_get_form', 'page arguments' => array('mymodule_admin_settings_form'), 'access arguments' => array('access administration pages'), 'file' => 'includes/mymodule.admin.inc', ); return $items; }
Т.к. title пропускается через t автоматически, то нигде дополнительно строки пропускать через t НЕ НАДО.
Как видите, тут уже не так сложно запомнить все параметры. Тем более что file и access arguments не являются обязательными. Хотя рекомендую группировать и выносить колбэки в отдельные файлы, чтобы подгружать необходимые методы только по необходимости.
Это меню рассмотрим более детально, чтобы хорошо понимать базу.
- title – название элемента меню и по совместительству (если не указано иное) – заголовок страницы
- description – описание элемента меню
- page callback – метод php который будет вызван для формирования страницы. Если необходимо вывести форму, то используется drupal_get_form, тогда в page arguments необходимо передать имя формы и, если необходимо, дополнительные параметры
- page arguments – параметры которые будут переданы в метод page callback. Также можно передать элемент из адреса, тогда необходимо указать его числовой индекс от начала адреса. Например, если путь mymodule/configure/%/edit то чтобы передать в качестве параметра то что стоит на месте % необходимо прописать page arguments => array(2). Разложим эту строку (нумерация начинается с нуля):
- mymodule => 0
- configure => 1
- % => 2
- edit => 3
- access arguments – имя правила доступа, наличие которого у пользователя будет проверяться при доступе к странице. По умолчанию используется метод user_access в которые передается в качестве аргумента имя правила доступа. Но можно определить и свой метод проверки доступа, тогда его необходимо указать в access callback
- file – имя файла в котором лежит метод для построения данных страницы. В данном примере в файле mymodule.admin.inc должен находится метод mymodule_admin_settings_form, который будет возвращать массив для для отрисовки формы.
title callback используется для динамического формирования заголовка на основе данных в роутинге. Например вместо «Добавить» выводить «Добавить новый объект», где на основе адреса будет выполняться разбор что же мы действительно добавляем. Либо использовать для вывода специфической информации, например, «Мой блог (10)», где в скобках выводить количество записей. Но будьте осторожны, т.к. кэширование может привести к побочным явлениям.
Больше информации вы найдете в описании к API. Конкретно по hook_menu для D7
Добавить комментарий