Plone:我可以让@manage portlet使用main\u template.pt以外的模板吗?

Plone:我可以让@manage portlet使用main\u template.pt以外的模板吗?,plone,Plone,我有一个备用的主页模板,homepage.pt,它有不同的布局。但是,当我单击manageportlets链接编辑portlet时,它使用main_template.pt而不是homepage.pt。有没有办法让@manage portlet使用您正在编辑portlet的页面所使用的模板?这是可行的,但布局与页面实际外观大不相同。我们为此注册了另一个页面,并注册了一个门户\u操作对象操作 zcml: 行动: <object name="homepage portlets" meta_typ

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

我们为此注册了另一个页面,并注册了一个门户\u操作对象操作

zcml:

行动:

<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>

主页portlet
字符串:${portal\u url}/@@manage homepageportlets
python:here.absolute\u url()==portal\u url
真的
模板:

<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>

管理主页portlet
顶级Portlet
中间Portlet
底部portlet

所以,答案是肯定的,只是有点混乱。您可以为plone.app.portlets中的manage-context.pt使用备用模板,并更改metal:use macro属性以使用自定义宏。我使用jbot并命名文件:

plone.app.portlets.browser.templates.manage-context.pt

做它应该做的。这将替换所有页面的manage Portlet视图,包括使用main_template.pt的页面。不是不可逾越的,但有点烦人。我可以想出一些解决办法:

  • 只需添加一个新的manage portlets yourspecialtemplate视图,该视图具有manage-context.pt的副本,并根据需要进行了修改。这是最简单的方法,让我可以在上下文中编辑我最初想要的所有portlet(包括已经存在的portlet)。耶
  • 我没有尝试过,但是如果只有主页是非main_template.pt模板的页面,那么可以尝试注册Products.CMFPlone.interfaces.IPloneSiteRoot接口的manage Portlet视图。我还没有尝试添加同名视图(但应用于不同的接口),所以我不知道这是否有效
  • manage-context.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>