ertttert
Для создания элемента меню предназначена функция hook_menu()
. Она принимает массив элементов, которые необходимо добавить в меню, и каждый такой элемент сам представляет собой массив пар “ключ-значение”, определяющих атрибуты элемента меню. Ключи массива элементов меню приведены в табл. 4.1.
Таблица 4.1. Атрибуты “ключ-значение” для функции hook_menu()
Ключ | Значение |
title ( |
Обязательное поле, которое представляет непереводимый заголовок элемента меню |
title callback ( |
Функция, используемая для генерации заголовка. По умолчанию это функция t() , поэтому заголовок (title) не нужно упаковывать в функцию t() . Если заголовок переводить не нужно, укажите значение FALSE |
title arguments ( |
Аргументы, которые нужно передать функции t() или собственному обратному вызову |
description ( |
Непереведенное описание элемента меню |
page callback ( |
Функция, которую нужно вызвать, чтобы вывести веб-страницу, когда пользователь посещает путь |
page arguments ( |
Массив аргументов, которые нужно передать функции обратного вызова страницы; целые значения передают соответствующий компонент URL-адреса |
access callback ( |
Функция, возвращающая логическое значение, которое определяет, имеет ли пользователь право доступа к этому элементу меню; по умолчанию это user_access() , если значение не унаследовано от родительского элемента меню |
access arguments ( |
Массив аргументов, которые нужно передать функции обратного вызова доступа; целые значения передают соответствующий компонент URL-адреса |
file ( |
Файл, который будет включен перед обратными вызовами; это позволяет хранить функции обратных вызовов в отдельных файлах. Файл должен быть указан относительно каталога реализующего модуля, если не задано что-то другое в параметре file path |
file path ( |
Путь к папке, содержащей файл, который указан в параметре file . По умолчанию это каталог с модулем, реализующим хук |
weight ( |
Целое число, определяющее относительное положение элемента в меню; элементы с большим весом находятся ниже. По умолчанию равно 0. Если вы не знаете, какое число присвоить, не задавайте это значение: обычно вполне годится стандартный алфавитный порядок |
menu_name ( |
Необязательный параметр, с помощью которого можно указать собственное меню, если не нужно, чтобы элемент находился в меню навигации |
type ( |
Битовое сочетание флагов, которые описывает свойства элемента меню; используются следующие значения: MENU_NORMAL_ITEM — обычные элементы меню помещаются в дереве меню и могут быть перемещены или скрыты администратором;MENU_CALLBACK — обратные вызовы просто регистрируют путь, чтобы при обращении к URL вызывалась нужная функция;MENU_SUGGESTED_ITEM — модули могут “предлагать” элементы меню, доступные для активации администратором;MENU_LOCAL_TASK — по умолчанию локальные задачи отображаются в виде вкладок;MENU_DEFAULT_LOCAL_TASK — каждый набор локальных задач должен содержать одну “стандартную” задачу, которая при щелчке выполняет переход к родительскому пути. |
Перехват управления процессом выполняется с помощью хука меню в модуле. Это позволяет определить элементы меню, которые будут включены в таблицу маршрутизатора. Давайте построим пример модуля по имени menufun.module
, чтобы поэкспериментировать с системой меню. Мы выполним отображение пути Drupal menufun на PHP-функцию menufun_hello()
, которую также предстоит написать. Вначале необходим файл menufun.info
по адресу sites/all/modules/custom/menufun/menufun.info
:
name = Menu Fundescription = Learning about the menu system.package = Pro Drupal Developmentcore = 7.xfiles[] = menufun.module
После этого понадобится создать файл sites/all/modules/custom/menufun/menufun.module
, содержащий реализацию hook_menu()
и функции, которая должна выполняться.
<?php/** * @file * Модуль для работы с системой меню Drupal. */ /** * Реализация hook_menu(). */ function menufun_menu() { $items['menufun'] =array( 'title' => 'Greeting','page callback' => 'menufun_hello','access callback' => TRUE,'type' => MENU_CALLBACK,) ;return $items; }
Приведенный код создает наше меню ($items['menufun']
) за счет создания массива с тремя парами “ключ-значение”:
/** * Обратный вызов страницы. */ function menufun_hello() {return t( 'Hello!') ; }
Активация данного модуля приводит к вставке элемента меню в таблицу маршрутизатора, после чего Drupal может найти и выполнить функцию при переходе по адресу http://example.com/?q=menufun
, как показано на рис. 4.3.
$items
. Мы используем путь, совпадающий с именем модуля — это позволяет не затрагивать пространство имен URL. Но в принципе можно определить любой путь.
Всего комментариев: 0 | |