apphooked 上的活动 CMS 菜单 object
Active CMS Menu on apphooked object
我有一个使用 Django CMS 3.5.1 和 Django 1.11.11 的网站,它有一个用 CMS 构建的菜单。它的其中一页是附有事件列表的。当我单击事件详细信息时,菜单失去其活动状态 class。
这是我的菜单:
{% 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" %}
访问 parent 的标题)但它没有吨。我是否必须制作 custom apphook menu 才能做到这一点,还是有更简单的解决方案?
在您为应用程序集成菜单之前,您附加应用程序的页面是菜单系统知道的最后一点。
添加菜单可让您的应用网址通过 NavigationNode(title, url, id)
网址对象与菜单应用集成。
因此,如果您有详细视图,可以附加一个简单的菜单;
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/en/latest/how_to/menus.html#integration-attach-menus
基于以上内容,您还可以根据 lists/querysets 等生成节点,就像您通过一些调查发现的那样;
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
这是 3.5.x 和 3.4.x 菜单增强中引入的回归。
已修复,将在 3.5.3 和 3.4.7 发布
我有一个使用 Django CMS 3.5.1 和 Django 1.11.11 的网站,它有一个用 CMS 构建的菜单。它的其中一页是附有事件列表的。当我单击事件详细信息时,菜单失去其活动状态 class。
这是我的菜单:
{% 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" %}
访问 parent 的标题)但它没有吨。我是否必须制作 custom apphook menu 才能做到这一点,还是有更简单的解决方案?
在您为应用程序集成菜单之前,您附加应用程序的页面是菜单系统知道的最后一点。
添加菜单可让您的应用网址通过 NavigationNode(title, url, id)
网址对象与菜单应用集成。
因此,如果您有详细视图,可以附加一个简单的菜单;
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/en/latest/how_to/menus.html#integration-attach-menus
基于以上内容,您还可以根据 lists/querysets 等生成节点,就像您通过一些调查发现的那样;
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
这是 3.5.x 和 3.4.x 菜单增强中引入的回归。
已修复,将在 3.5.3 和 3.4.7 发布