Персональна сторінка shra, блог фріленсерів, веб-розробника на PHP. Тут я ділюся своїм досвідом і думками, проводжу досліди над людьми, збираю нематеріальні свідоцтва власної дурості. Використовуючи приклади програмного коду з даного сайту, ви приймаєте всю відповідальність за можливі наслідки їх використання, включаючи ваше психічне здоров'я і інтереси третіх осіб.
Блог / drupal / Працюємо з меню в drupal 7
У статті піде мова від системі меню в Drupal, деяких корисних модулях і прикладах програмування. Хоч мова піде про Drupal 7, і приклади підготовлені саме для цієї версії, але багато чого буде актуально і для «шістки».
Модуль меню - частина drupal. Підсистема меню добре інтегрована і продумана. Drupal містить цілу бібліотеку функцій для роботи з деревом меню, ціле API. Ми його трохи торкнемося в прикладах.
Як влаштовано меню в Drupal
Ми можемо створювати об'єкти меню у вигляді дерева посилань. Максимальна глибина дерева - 9.
Якщо ми відкриємо сторінку адміністрування (/ admin / structure / menu), то в списку меню вже будуть кілька створених об'єктів.
- 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).