我的问题很简单......
在 Plone 4 (4.2) 中,我需要设置什么以使默认视图(例如简单页面)显示在导航树中。
导航树使用该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>
需要注意的是,这是未经测试的,但它应该可以工作。
您还可以在文件夹中创建一个链接,将目标设置为“./idOfPage1”并将链接设置为文件夹的默认视图。
没有编辑权限的用户将被重定向到 Page1,页面本身将显示在 navportlet 中。