Контроль активности Drupal / active-trail с дублирующимися пунктами меню

#drupal #menu

#drupal #меню

Вопрос:

Я разрабатываю сайт, который требует некоторого дублирования ссылок в меню:

Раздел A
— Введение
— Отзывы

Раздел B
— Введение
— Отзывы

Отзывы
— Раздел A
— Раздел B

Таким образом, «Раздел A> Отзывы» и «Отзывы> Раздел A» указывают на один и тот же узел. Но независимо от того, какую ссылку меню используют люди, я хочу, чтобы пользователь находился в разделе A.

Проблема в том, что D6 не любит дублирующиеся пункты меню, и он назначает классы active и active-trail довольно непредсказуемо.

Итак, моя мысль заключалась в том, чтобы создать узел-заполнитель для каждого элемента в меню отзывов, а затем установить URL-адрес на что-то вроде «отзывы / перенаправление / раздел-a», а затем использовать mod_rewrite для перенаправления на «раздел-a / отзывы».

С этим решением у меня не будет повторяющихся путей в меню. Я просто надеюсь, что это каким-то образом не повредит моему SEO.

Кто-нибудь знает лучшее решение?

Ответ №1:

У меня тоже есть эта проблема. Когда несколько пунктов меню ссылаются на одно и то же содержимое, Drupal будет использовать элемент с наименьшим идентификатором меню как канонический — независимо от того, по какой ссылке меню вы нажмете, вы получите активный trail для наименьшего идентификатора меню.

Лучший известный мне способ исправить это, который мне не нравится, — указать ваши неканонические пункты меню на узел, который перенаправит на нужный вам узел (вы могли бы использовать фильтр ввода php с drupal_goto или что-то подобное)

К сожалению, модуль path_redirect не решит эту проблему, поскольку пути перенаправления, которые он создает, не могут использоваться в качестве пунктов меню.

Я не уверен, почему в d6 больше нет людей с таким вариантом использования — по моему опыту, довольно часто требуется, чтобы пункты меню верхнего уровня указывали на первого дочернего элемента, и требуется установить active trail для первого дочернего элемента.

модуль nodesymlinks решает обратный вариант использования — он позволяет вам настроить несколько пунктов меню, каждый со своим собственным путем, указывающим на один и тот же узел. таким образом, в зависимости от того, по какой ссылке вы нажимаете в меню, вы получаете другой активный trail. этот модуль был бы хорошей моделью для модуля «канонический пункт меню».

Ответ №2:

У нас была такая же проблема в нашем проекте, и нам удалось добиться корректной работы active trail, установив в каждом дублирующемся пункте меню «# n» в конце. Например:

 Section A
-- Introduction -> node/1#1
-- Testimonials

Section B
-- Introduction -> node/1#2
-- Testimonials

Testimonials
-- Introduction -> node/1#n
-- Section B
  

не самое красивое решение, но определенно более быстрое 🙂 Единственное неудобство, которое мы обнаружили, заключается в том, что если пользователь сначала нажмет на «Раздел A — Введение», а сразу после — на «Раздел B — Введение», страница не будет перезагружена.

Надеюсь, это поможет

Ответ №3:

Меню с несколькими узлами может помочь:

Этот модуль изменяет «Настройки меню» в стандартной форме редактирования узла, чтобы разрешить управление несколькими ссылками меню на узел. Стандартное поведение Drupal заключается в том, чтобы заботиться только об одной ссылке меню для anode, все остальные ссылки меню должны быть добавлены через администрирование меню.