Plone:我可以使@@ manage-portlets使用除main_template.pt之外的模板吗?

时间:2012-06-01 08:24:13

标签: plone

我有一个备用主页模板homepage.pt,它有不同的布局。但是,当我单击manage-portlets链接来编辑portlet时,它使用main_template.pt而不是homepage.pt。有没有办法让@@ manage-portlets使用您正在编辑portlet的页面使用哪个模板?它是可行的,但布局与页面的实际外观完全不同。

2 个答案:

答案 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的那些视图。不是不可克服的,但有点烦人。我可以想到几个解决方案:

  1. 只需添加一个新的manage-portlets-yourspecialtemplate视图,该视图包含manage-contextual.pt的副本,已修改为适合。这是最简单的方法,让我在上下文中编辑我所有的portlet(包括那些已经存在的portlet)。耶!
  2. 我没有尝试过,但是如果您使用nonmain_template.pt模板的唯一页面是您的主页,您可以尝试为Products.CMFPlone.interfaces.IPloneSiteRoot接口注册manage-portlets视图。我没有尝试添加具有相同名称的视图(但适用于不同的接口),所以我不知道这是否有效。
  3. manage-contextual.pt中的一些条件逻辑,它使用不同的模板基于您用来区分具有不同模板的页面。