Plone:在导航树上显示默认视图

Plone:在导航树上显示默认视图,plone,Plone,我的问题很简单 在Plone 4(4.2)中,我需要设置什么来创建一个默认视图,例如一个简单的页面,以显示在导航树中 导航树使用INavigationQueryBuilder组件查找显示的所有元素。默认实现过滤掉用作默认页面的任何内容 您必须提供自己的实现;但您可以重新使用原始实现。您所要做的就是稍微修改生成的查询;通常,如果不存在更具体的查询,是默认页面索引用于过滤默认页面。但如果修改后的查询添加了对该索引的搜索,则不会尝试添加更具体的过滤器。将其设置为搜索(True,False)意味着它将同

我的问题很简单

在Plone 4(4.2)中,我需要设置什么来创建一个默认视图,例如一个简单的页面,以显示在导航树中


导航树使用
INavigationQueryBuilder
组件查找显示的所有元素。默认实现过滤掉用作默认页面的任何内容

您必须提供自己的实现;但您可以重新使用原始实现。您所要做的就是稍微修改生成的查询;通常,如果不存在更具体的查询,
是默认页面
索引用于过滤默认页面。但如果修改后的查询添加了对该索引的搜索,则不会尝试添加更具体的过滤器。将其设置为搜索
(True,False)
意味着它将同时返回默认和非默认页面,从而有效地中和过滤器

然后,实现变成:

from plone.app.portlets.portlets.navigation import QueryBuilder, INavigationPortlet
from zope.component import adapts
from zope.interface import implements, Interface


class INonDefaultPageFilteringNavigationPortlet(INavigationPortlet):
    pass


class DontFilterDefaultQueryBuilder(QueryBuilder):
    implements(INavigationQueryBuilder)
    adapts(Interface, INavigationPortlet)

    def __init__(self, context, portlet):
        super(DontFilterDefaultQueryBuilder, self).__init__(context, portlet)
        self.query['is_default_page'] = (True, False)  # Don't filter out default pages
您必须将其注册为适配器,并将
INonDefaultPageFilteringNavigationPortlet
添加到您的portlet以“激活”此生成器:

<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:five="http://namespaces.zope.org/five">

<adapter factory=".yourmodule.DontFilterDefaultQueryBuilder" />

<five:implements
    class="plone.app.portlets.portlets.navigation.Assignment"
    interface=".yourmodule.INonDefaultPageFilteringNavigationPortlet" />

</configure>


需要注意的是,这是未测试的,但应该可以使用。

您也可以在文件夹中创建链接,将目标设置为“./idOfPage1”,并将链接设置为文件夹的默认视图

没有编辑权限的用户将被重定向到Page1,然后页面本身将显示在navportlet中