Працюємо з меню в drupal 7

Персональна сторінка shra, блог фріленсерів, веб-розробника на PHP. Тут я ділюся своїм досвідом і думками, проводжу досліди над людьми, збираю нематеріальні свідоцтва власної дурості. Використовуючи приклади програмного коду з даного сайту, ви приймаєте всю відповідальність за можливі наслідки їх використання, включаючи ваше психічне здоров'я і інтереси третіх осіб.

Блог / drupal / Працюємо з меню в drupal 7

У статті піде мова від системі меню в Drupal, деяких корисних модулях і прикладах програмування. Хоч мова піде про Drupal 7, і приклади підготовлені саме для цієї версії, але багато чого буде актуально і для «шістки».

Модуль меню - частина drupal. Підсистема меню добре інтегрована і продумана. Drupal містить цілу бібліотеку функцій для роботи з деревом меню, ціле API. Ми його трохи торкнемося в прикладах.

Як влаштовано меню в Drupal

Ми можемо створювати об'єкти меню у вигляді дерева посилань. Максимальна глибина дерева - 9.

Якщо ми відкриємо сторінку адміністрування (/ admin / structure / menu), то в списку меню вже будуть кілька створених об'єктів.

Працюємо з меню в drupal 7

  • Main menu призначене для відображення елементів меню, посилань навігації на front-end сайту.
  • Managment - містить пункти меню для адміністрування сайту
  • Navigation - включає в себе всі оголошуються в модулях об'єкти меню (коли використовується hook_menu)
  • User menu - містить посилання пов'язані з профілем користувача, в тому числі посилання Log out.

Хлібні крихти, breadcrumbs в Drupal

Розповідаючи про меню в друпал, не можна обійти стороною такий елемент системи як хлібні крихти. Цей елемент зазвичай підключається в шаблон у вигляді такої змінної:

Він являє собою послідовність посилань в поточній ієрархії створених меню. Тобто якщо поточна сторінка сайту оголошена елементом якого то меню - то ви отримаєте набір посилань від кореня дерева до елемента, що посилається на дану сторінку. Коренем дерева меню є головна сторінка.

Змінна $ breadcrumb в шаблоні - це HTML код, з ним нічого не поробиш. Але ви можете використовувати hook_menu_breadcrumb_alter. щоб запрограмувати необхідні корективи до рендеринга крихт.

Адмін меню в Drupal

У 7 версії в ядро ​​доданий модуль адмін меню, для ієрархії якого використовується дерево меню managment. Його функціонал схожий на Administration menu. який я використовую для проектів на Drupal 6. Цей сторонній модуль мені здається більш зручним і функціональним, але під 7кой я вважаю за краще йому вбудований модуль, тому що не люблю перевантажувати проекти 3d part модулями.

Користувач з відповідними правами отримує меню адміністратора у вигляді чорної горизонтальної смужки в верху екрана.

Корисні 3d part модулі, пов'язані з системою меню

Модуль дозволяє створювати блоки з випадають меню, звичними для нас в графічному інтерфейсі операційної системи. Тобто при наведенні на елемент меню, що містить підпункти, буде відображений шар з елементами наступного рівня меню і т.д.

Для любителів створювати меню за словниками (таксономії) також є спеціальні модулі - Taxonomy Menu, Nice Taxonomy Menus.

Якщо вам не потрібна адові міць pathauto (а у нього купа налаштувань і можливостей), то можете почитати як обійтися парою власних функцій для генерації синоніма шляху Ноди в Drupal.

Hook Menu - додавання елементів в навігацію Drupal

Зачіпка до меню дозволяє задати модулю власні елементи в навігації сайту і їх обробники. Ось невеличкий приклад модуля mymodule.

Елементи меню API Drupal

Була ідея описати якісь окремі функції і приклади роботи з ними. Але якщо подивитися на файл, який реалізує Drupal menu API (/includes/menu.inc), який в Drupal 7 містить майже 4000 рядків, то стає зрозумілим, що це завдання не для статті, а для цілого мануала. Варто знайти трохи часу, щоб погортати вказаний файл API, якщо ви збираєтеся працювати з Drupal.

Проте кілька корисних і простих функцій заслуговують згадки.

function menu_tree ($ menu_name)

Функція поверне вам дерево меню, системне ім'я якого ви вказали, в вигляді масиву для функції рендеринга drupal - drupal_render (). Це зручна функція для написання власного коду модифікації меню в drupal. При цьому дерево будується виходячи з поточної активної сторінки, ґрунтуючись на поточному шляху (url). Елементи дерева містять маркери активної сторінки і хлібних крихт.

Див також - висновок потрібного рівня меню. який я написав на базі коду цієї функції. Приклад був написаний ще для Drupal 6.

function menu_tree_all_data ($ menu_name, $ link = NULL, $ max_depth = NULL)

Ця функція дозволяє повернути повне дерево меню. Для рендеринга засобами drupal отримане дерево слід прогнати через menu_tree_output ($ tree).

Схожі статті