Активное меню CMS на выбранном объекте - PullRequest
0 голосов
/ 25 мая 2018

У меня есть сайт с Django CMS 3.5.1 и Django 1.11.11, и у него есть меню, созданное с помощью CMS.Одна из его страниц представляет собой списки событий.Когда я нажимаю на детали события, меню теряет свой активный класс.

Вот мое меню:

{% for child in children %}
    <li class="js-submenuParent {% if child.selected or child.ancestor %}active{% endif %}">
        <a href="{% if child.children %}javascript:void(0);{% else %}{{ child.attr.redirect_url|default:child.get_absolute_url }}{% endif %}" class="{% if child.children %}submenu-btn js-openSubmenu{% endif %}">{{ child.get_menu_title }}</a>

    {% if child.children %}
        <ul class="submenu js-submenu">
            {% show_menu from_level to_level extra_inactive extra_active template "" "" child %}
        </ul>
    {% endif %}
    </li>
{% endfor %}

Я думал, child.ancestor может решить проблему (или даже child.selected каккажется, я могу получить доступ к названию родителя, используя {% page_attribute "page_title" %}), но это не так.Нужно ли мне настраивать пользовательское меню apphook просто для этого или есть более простое решение?

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Это регрессия, введенная в улучшениях меню 3.5.x и 3.4.x.

Она исправлена ​​и будет выпущена в 3.5.3 и 3.4.7

Билет по теме: https://github.com/divio/django-cms/issues/6336

0 голосов
/ 26 мая 2018

Страница, к которой вы прикрепляете свое приложение, является последней точкой, о которой система меню знает, пока вы не интегрируете меню для своего приложения.

Добавление меню позволяет URL-адресам вашего приложения интегрироваться с приложением меню через NavigationNode(title, url, id) объектов для ваших URL.

Так что, если у вас есть подробный вид, вы можете прикрепить простое меню;

from menus.base import NavigationNode
from menus.menu_pool import menu_pool
from django.utils.translation import ugettext_lazy as _
from cms.menu_bases import CMSAttachMenu

class EventMenu(CMSAttachMenu):

    name = _("event menu")

    def get_nodes(self, request):
        nodes = []
        n = NavigationNode(_('detail page'), "/detail", 1)
        nodes.append(n)
        return nodes

menu_pool.register_menu(EventMenu)

Документы на это здесь;http://docs.django -cms.org / ru / latest / how_to / menus.html # integra-attach-menus

На основании вышеизложенного можно также создавать узлы на основе списков / наборов запросови т.д., как вы нашли с небольшим расследованием;

def get_nodes(self, request):
    nodes = []
    for event in Event.objects.published():
        n = NavigationNode(
            event.title,  # title
            event.get_absolute_url(),  # url
            'id_{slug}'.format(slug=event.slug),  # unique ID for node
            visible=False
        )
        nodes.append(n)
    return nodes
...