Статьи

Создание пользовательских меню в Drupal

Drupal имеет очень настраиваемую архитектуру, так что вы можете расширить Drupal в соответствии со своими потребностями.

Drupal предоставляет различные виды хуков, которые модуль может использовать для настройки функциональности, и имеет мощную систему меню для создания пунктов меню на вашем сайте Drupal.

Drupal также предоставляет хуки разработчикам модулей для подключения к системе меню Drupal и создания пунктов меню для работы модуля. Хуки системы меню в Drupal позволяют регистрировать URL-адреса, чтобы модуль мог определить, как будет обрабатываться запрос к URL-адресу, а также, если модуль хочет добавить эту ссылку в меню.

В этой статье мы рассмотрим, как ваш модуль может подключиться к системе меню Drupal для регистрации обратных вызовов на URL-адресах и как добавить их в навигационное меню при необходимости.

Создание модуля

Давайте начнем с создания отдельного модуля под названием menudemo, который мы будем использовать для демонстрации различных функциональных возможностей системы меню, которые предлагает нам Drupal.

Чтобы создать модуль меню демо, создайте папку в menudemo sitesallmodulescustom всех пользовательских установок Drupal. В этой папке создайте файл с именем menudemo.info со следующим содержимым.

 ;$Id$ name = menudemo description = A module to  demo drupals menu system package = Menu Demo Package core = 7.x files[] = menudemo.module 

Файл menudemo.info описывает наш модуль для системы Drupal. В информационном файле мы описали различные параметры, такие как имя модуля, описание, имя пакета и т. Д.

Также в папке menudemo создайте файл menudemo.module .

Структура вашей папки будет выглядеть следующим образом:

структура меню

Как только вы добавите свои файлы, вы сможете увидеть свой модуль в списке модулей Drupal. Вы должны пойти и включить модуль сейчас, как показано ниже.

модуль меню

Ответ на URL через меню обратного вызова

После того, как мы создали наш модуль с необходимыми файлами, давайте рассмотрим хук, который Drupal предоставляет разработчикам модулей как способ подключиться к системе меню Drupal.

Чтобы подключить модуль к системе меню Drupal, необходимо реализовать хук hook_menu . Эта реализация этой ловушки требуется для возврата ассоциативного массива пунктов меню, которые предполагается добавить модулю. Ассоциативный массив будет содержать пути к меню в качестве ключа и его свойства в качестве значения этого элемента массива.

Итак, в нашем модуле мы даем реализацию hook_menu , предоставляя функцию menudemo_menu следующим образом

 /** * Implementation of hook_menu(). */ function menudemo_menu() { $menuitems['menudemo'] = array( 'title' => 'My Menu', 'page callback' => 'menudemo_mymenu_page_callback', 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); return $menuitems; } function menudemo_mymenu_page_callback() { return 'My Menu URL was hit'; } 

В функции menudemo_menu выше мы создали ассоциативный массив с ключом menudemo, который является названием нашего модуля. Но вы можете использовать здесь ключ на основе URL, который вы хотите обработать и на который ответите в своем модуле.

Затем мы передали параметры, определяющие пункты меню, такие как его заголовок. Определение типа как MENU_CALLBACK просто означает регистрацию пути, который, при запросе, сможет обработать запрос. Новый пункт меню не будет создан.

И мы также определили обратный вызов доступа и установили его как TRUE чтобы этот пункт меню мог быть доступен каждому.

Мы определили обратный вызов страницы, в котором вы указываете функцию, которая должна вызываться при обращении к этому URL. Мы определили это для menudemo_mymenu_page_callback . В функции menudemo_mymenu_page_callback мы только что вернули строку, которая будет отображаться при запросе нашего зарегистрированного URL.

Теперь просто перейдите по URL <your drupal installation URL>/menudemo , если у вас включены чистые URL, или по <your drupal installation URL>/?q=menudemo если чистые URL не включены. Вы должны быть в состоянии увидеть вывод вашей страницы обратного вызова на экране следующим образом

Примечание: — Drupal кеширует хуки, которые реализует модуль, поэтому вам, возможно, придется перейти в Администрирование »Конфигурация» Разработка »Производительность и создать чистый кеш, чтобы учесть новые изменения в хуках, реализованных вашим модулем в Drupal 7.

мое меню

Извлечение параметров из URL меню

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

Таким образом, если вы зарегистрировались для URL-пути и в нем есть значения после него, они передаются в качестве параметров функции обратного вызова. Это становится очень удобным, когда вы хотите, чтобы пункт меню работал по-разному в зависимости от переданного ему параметра.

Например, если вы хотите добавить пункт меню для обработки товаров на вашем сайте, вы можете использовать одну и ту же функцию обратного вызова для другого URL, например menudemo/product/add или menudemo/product/view и т. Д. Чтобы перехватить параметры нам придется изменить наш обратный вызов, как показано ниже

 function menudemo_mymenu_page_callback($firstparameter = '', $secondparameter ='') { $result = 'My Menu URL was hit'; $result.='<br> The first parameter passed to the url is :'.$firstparameter; $result.='<br> The second parameter passed to the url is :'.$secondparameter; return $result; } 

Здесь есть два параметра, перехваченных и переданных функции обратного вызова. Затем в функции обратного вызова мы просто отображаем параметры на экране. Поэтому, если вы <your drupal installation URL>/menudemo/product/edit по URL <your drupal installation URL>/menudemo/product/edit результат будет следующим

ваше меню

Добавление ссылок в меню на панели навигации

До сих пор мы видели, как мы можем зарегистрировать URL в системе Drupal, чтобы любой запрос к этим URL обрабатывался нашей функцией обратного вызова.

Если мы хотим, чтобы этот URL отображался в меню навигации, мы можем сделать это, изменив тип элемента меню. Модифицированная функция menudemo_menu выглядит следующим образом

 /** * Implementation of hook_menu(). */ function menudemo_menu() { $menuitems['menudemo'] = array( 'title' => 'My Menu', 'page callback' => 'menudemo_mymenu_page_callback', 'access callback' => TRUE, 'type' => MENU_NORMAL_ITEM, ); return $menuitems; } 

В вышеупомянутой функции мы передали тип как MENU_NORMAL_ITEM . Это заставит пункт меню отображаться в меню навигации, как показано ниже.

URL моего меню

Создание подменю в панели навигации

После того, как вы создали элемент в меню навигации, вы можете создать подменю или вложенные пункты меню под ним. Мы можем добавить подменю к пунктам меню, добавив путь к пункту подменю после пути к пункту меню в ассоциативном массиве, который мы передаем обратно в menudemo_menu function .

Чтобы добавить подменю, мы обновим функцию menudemo_menu следующим образом

 /** * Implementation of hook_menu(). */ function menudemo_menu() { $menuitems['menudemo'] = array( 'title' => 'My Menu', 'page callback' => 'menudemo_mymenu_page_callback', 'access callback' => TRUE, 'type' => MENU_NORMAL_ITEM, ); $menuitems['menudemo/submenu'] = array( 'title' => 'My Sub menu', 'page callback' => 'menudemo_mysubmenu_page_callback', 'access callback' => TRUE, 'type' => MENU_NORMAL_ITEM, ); return $menuitems; } function menudemo_mysubmenu_page_callback() { $result = 'My  Sub Menu URL was hit'; return $result; } 

Здесь мы добавили еще одну запись в ассоциативный массив с ключом в качестве menudemo/submenu . Это создаст подменю ниже пункта меню menudemo. Мы определили функцию menudemo_mysubmenu_page_callback как функцию обратного вызова для элемента подменю, которая просто отображает текст как 'My Sub Menu URL was hit' .

Теперь, если мы нажмем на элемент подменю, мы сможем увидеть результат следующим образом

мое подменю

Вывод

Система Drupal позволяет разработчикам модулей подключаться к основной обработке Drupal через хуки Drupal. В этой статье мы увидели, как мы можем использовать hook_menu системы меню Drupal, чтобы зарегистрировать наши собственные обратные вызовы для обработки запроса на определенные URL-адреса или добавления пунктов меню в меню навигации.

Система Drupal также передает параметры в URL функции обратного вызова, которая может помочь написать общую функцию обратного вызова, которая может обрабатывать несколько задач на основе переданных ей параметров.

Теперь, в зависимости от модуля, который вы пытаетесь создать в Drupal, вы можете захотеть добавить простые пункты меню или вложенные пункты меню, чтобы позволить пользователю легко получить доступ к функциям, которые вы пытаетесь предоставить.

Получайте удовольствие от добавления меню в ваш следующий модуль Drupal.