0

我的问题很简单......

在 Plone 4 (4.2) 中,我需要设置什么以使默认视图(例如简单页面)显示在导航树中。

不显示默认视图

4

2 回答 2

1

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

您必须提供自己的实现;但您可以重新使用原始实现。您所要做的就是稍微改变生成的查询;通常,如果不存在更具体的查询,is_default_page则使用索引来过滤掉默认页面。但是,如果您更改的查询添加了对该索引的搜索,则它不会尝试添加更具体的过滤器。将其设置为搜索(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>

需要注意的是,这是未经测试的,但它应该可以工作。

于 2012-12-03T22:02:39.667 回答
0

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

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

于 2012-12-04T09:59:43.293 回答