我有一个备用主页模板homepage.pt,它有不同的布局。但是,当我单击manage-portlets链接来编辑portlet时,它使用main_template.pt而不是homepage.pt。有没有办法让@@ manage-portlets使用您正在编辑portlet的页面使用哪个模板?它是可行的,但布局与页面的实际外观完全不同。
答案 0 :(得分:3)
我们为此目的注册了另一个页面并注册了portal_actions对象操作
ZCML:
<browser:page
for="plone.portlets.interfaces.ILocalPortletAssignable"
class="plone.app.portlets.browser.manage.ManageContextualPortlets"
name="manage-homepageportlets"
template="templates/managehomepageportlets.pt"
permission="plone.app.portlets.ManagePortlets" />
视图:
class HomepageView(BrowserView):
template = ViewPageTemplateFile('templates/homepage_view.pt')
动作:
<object name="homepage portlets" meta_type="CMF Action">
<property name="title">Homepage-portlets</property>
<property name="url_expr">string:${portal_url}/@@manage-homepageportlets</property>
<property name="available_expr">python: here.absolute_url() == portal_url</property>
<property name="visible">True</property>
</object>
模板:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
metal:use-macro="context/main_template/macros/master"
i18n:domain="plone">
<body>
<div metal:fill-slot="main">
<h1 class="documentFirstHeading">Manage Homepage Portlets</h1>
<h2>Top portlets</h2>
<span tal:replace="structure provider:project.homepagetop" />
<h2>Middle portlets</h2>
<span tal:replace="structure provider:project.homepagemiddle" />
<h2>Bottom portlets</h2>
<span tal:replace="structure provider:project.homepagebottom" />
</div>
</body>
</html>
答案 1 :(得分:0)
所以,答案是肯定的,有点乱。您可以在plone.app.portlets中使用manage-contextual.pt的备用模板,并更改metal:use-macro属性以使用您的自定义宏。我使用jbot并命名文件:
plone.app.portlets.browser.templates.manage-contextual.pt
应该做什么。这会替换所有页面的manage portlets视图,包括使用main_template.pt的那些视图。不是不可克服的,但有点烦人。我可以想到几个解决方案: