我有一个网站,它有一个通过 plone.app.theming / Diazo 主题显示的公共 url,并且 url 仅限于通过 sunburst 显示的内容编辑器。
我希望某些门户类型仅出现在 cms 编辑器的列表中,而不出现在公共站点上。我注意到 folder_listing 模板request/contentFilter
在定义时使用。有没有办法为主题视图的请求添加内容过滤器?
我最终使用 Plone 站点上的预遍历钩子解决了这个问题。这对我来说很有效,因为我可以根据请求的某些属性可靠地确定请求是针对主题视图还是针对编辑视图。
def SetupThemeView(site, before_traverse):
""" If we're serving the public, themed, version then supplement the request
"""
request = before_traverse.request
if serving_theme_view(request):
request.set('contentFilter', {'portal_type' : listable_types})
Whereserving_theme_view
确定我们是在为主题视图还是编辑器视图提供服务,并且listable_types
是我们希望出现在主题视图的列表中的类型名称的元组。
然后我在我的 configure.zcml 中将其注册为订阅者
<subscriber
for="Products.CMFCore.interfaces.ISiteRoot
zope.traversing.interfaces.IBeforeTraverseEvent"
handler=".events.SetupThemeView"
/>