Як я можу ввести меню таксономії як підменю стандартного пункту меню?


12

У мене головне меню зі структурою верхнього рівня, подібною до наступних:

Home - Categories - Something Else - ... - Contact

Кожне з цих посилань верхнього рівня переходить на відповідну сторінку вузла.

У мене є словник для категорій (багаторівневий), і мені потрібно вказати ці терміни таксономії в підменю під пунктом "Категорії". Я хотів би уникати жорсткого кодування елементів у головному меню, оскільки підменю повинно зростати / скорочуватися, як і словниковий запас.

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

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

Я не можу не відчути, що для цього повинно бути «стандартне» рішення, засноване на модулях.

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


1
Я думаю, я це бачив ... У подібній темі міститься ідея про використання правил для створення елементів, заснованих на систематиці в меню, але це теж здається ідеальним.
Молот

Якщо я правильно зрозумів, чи схожи ви на цей модуль drupal.org/project/taxonomy_treemenu , він може інтегруватися з приємним меню, але для D6
Бала

Чи повинні у вас бути фактичні пункти меню чи це можливо додати дерево термінів таксономії, коли воно відображається?
rooby

Дякуємо @Bala, все ж потрібне рішення D7
Клайв

1
Клайв У мене є одна пропозиція. Як я знаю, ви можете створити таксономічне меню із включеною назвою словника, а потім просто додати інші посилання на меню безпосередньо у створене меню. Елементи таксономії можуть бути оновлені автоматно ... Я не знаю, чи спрацює це, просто спробуйте.
мілковський

Відповіді:


13

Варіант a) Якщо я не помиляюся, ви можете не просто вибрати, де буде створено ваше меню таксономії (місце розташування меню) під час його створення? Єдина проблема, яку я думаю, у вас може виникнути ця проблема, я думаю, що вона вимагає, щоб ви переобладнували меню щоразу, коли систематика оновлюється

Варіант б) Я зробив щось досить подібне до цього на своєму веб-сайті, я використовував модуль « Перегляд меню» , щоб дозволити мені переглядати своє основне меню.

Якщо ви створюєте новий вид, у якому перераховані всі ваші умови таксономії, як блок відображення, застосуйте будь-яку додаткову фільтрацію / модифікацію в представленні, якщо це необхідно (ви не можете, але в моєму прикладі я цього хотів). Потім, коли ви додасте нове посилання до головного меню, ви можете скористатися переглядом, а не посиланням. Звідти ви вибираєте, який вид ви хочете використовувати, вибираєте елемент меню "Категорія" як його батьківський і зберігаєте (після збереження вам потім потрібно включити його в меню, яке, здається, є помилкою з самим модулем)

Я не можу гарантувати, що це найкраще рішення для вас, але воно спрацювало, коли я тільки тестував його


1
Так, виявляється, я досить дурний - таксономічне меню має вбудований саме цей функціонал (ваш варіант a). Конкретне меню, з яким я маю справу, досить невелике, і категорії не змінюватимуться часто, тому перебудова не є проблемою. Велике спасибі за перевірку здорового стану
Clive

3

Menupoly має API для користувацьких "джерел дерев меню". Я ніколи насправді не використовував це для чогось іншого, ніж посилання на меню, тому можуть виникнути проблеми, які нам доведеться виправити на шляху. Але основна архітектура є.

Якщо ви йдете цим маршрутом, ви б

  • Використовуйте наявне головне меню, без будь-яких посилань на терміни таксономії, які не входять до сторінки "Категорії"
  • Створіть своє дерево таксономії незалежно від цього.
  • Напишіть спеціальне "джерело дерева меню", яке отримується з меню_посилання як звичайне, але коли він знаходить термін таксономії, він замість цього отримує з таксономії.
    Отже, якось потрібно вміти виявити, що посилання "Категорії" пов'язане з систематикою.
  • Якщо посилання на меню пов'язане з систематикою і одночасно має регулярне підменю, потрібно якось змішати два типи дітей разом.

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

Наразі не існує навіть "джерела дерев меню" лише систематики, тому, можливо, це було б розумним першим кроком перед початком роботи зі змішаним плагіном.


як це було сказано, прийнята відповідь Ендрю Морріса може бути досить добре. А це означає менше роботи для мене :) Все ж хотілося опублікувати це для всіх, хто може вважати це корисним.
donquixote

В. цікаво, дякую. Прийнята відповідь робить цю роботу чудово, але я дуже зацікавлений отримати кодові рішення. Чи можу я припустити, що це один із ваших модулів, що він побудований на доброті PSR-0? :)
Клайв

У цьому використовується режим сумісності PHP 5.2 xautoload, який дещо схожий на PEAR, але з неглибокими каталогами. Отже, не затверджено PSR. Я можу піти PSR-0 якийсь день ..
donquixote

хоча мене дуже цікавить PSR-X (який, на жаль, ніколи не потрапить у D8, на жаль)
donquixote

2

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

Сумісність із сенсорним екраном (iPad, iPhone тощо).

введіть тут опис зображення


2

Ви можете використовувати модуль меню Om Maxi для того ж самого. Це дозволить адміністратору створювати меню з блоками, які ви хочете, як додатки, модулі, такі як перегляди, слайд-шоу, меню, користувач, приємні меню, швидкі вкладки та спеціальні блоки з таблицями, списками, зображеннями, відео тощо.

Ви можете створити окреме меню за допомогою меню таксономії та додати це меню як підпосилання до меню, згенерованого меню om maxi.

Дякую


2

Нещодавно я щось подібне робив для меню категорії продуктів. Це було лише для глибини 1 рівня, але його можна було легко змінити, щоб показати подальші рівні.

/**
 * Implements theme_menu_link().
 */
function THEME_menu_link__main_menu($variables) {

  $sub_menu = '';
  $element = $variables['element'];
  $menu_string = $element['#title'];

  if (module_load_include('inc','pathauto','pathauto') !== FALSE) {
    $menu_string =  pathauto_cleanstring($menu_string);
  }

  if ($menu_string == 'categories') {
    $sub_menu = get_categories_menu();
  }

  if ($sub_menu) {
    $element['#attributes']['class'][] = 'haschildren';
  }

  $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}

function get_categories_menu() {

  $current_category = arg(2); // Get current category from path
  $volcab = taxonomy_vocabulary_machine_name_load('product-categories');
  $tree = taxonomy_get_tree($volcab->vid,0,1);

  $output = '<ul class="menu product-category">';
  foreach ($tree as $term) {
    $safe_term = pathauto_cleanstring($term->name);
    $class = ($current_category==$safe_term) ? ' class="active"' : '';
    $output .= '<li><a' . $class . ' href="/drupal//path/to/' . $safe_term . '">' . $term->name . '</a></li>';
  }
  $output .= '</ul>';

  return $output;
}

Функція get_category_menu краще використовувати як блок, але тут для зручності показана як інша функція в template.php.

Сподіваємось, це допомагає або є хоча б кроком до рішення.

Пол

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.