1

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

4

2 回答 2

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>
于 2012-06-01T08:50:12.907 回答
0

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

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

做它应该做的。这将替换所有页面的管理 portlet 视图,包括使用 main_template.pt 的页面。不是无法克服,但有点烦人。我能想到几个解决方案:

  1. 只需添加一个新的 manage-portlets-yourspecialtemplate 视图,其中包含 manage-contextual.pt 的副本,并进行修改以适合。这是最简单的方法,让我可以按照我最初的需要在上下文中编辑我的所有 portlet(包括那些已经存在的 portlet)。耶!
  2. 我没有尝试过,但是如果您的主页只有一个带有 non-main_template.pt 模板的页面,那么您可以尝试为 Products.CMFPlone.interfaces.IPloneSiteRoot 接口注册一个 manage-portlets 视图。我没有尝试添加具有相同名称的视图(但适用于不同的界面),所以我不知道这是否有效。
  3. Some conditional logic in manage-contextual.pt that uses a different template based on whatever you use to distinguish whichever pages have different templates.
于 2012-06-22T04:57:17.747 回答