別のレイアウトの代替ホームページ テンプレート、homepage.pt があります。しかし、manage-portlets リンクをクリックしてポートレットを編集すると、homepage.pt ではなく main_template.pt が使用されます。ポートレットを編集しているページで使用するテンプレートを @@manage-portlets で使用する方法はありますか? そのままでも動作しますが、レイアウトが実際のページとは大きく異なります。
質問する
238 次
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
すべきことをします。ただし、これにより、main_template.pt を使用していたページを含むすべてのページのポートレットの管理ビューが置き換えられます。克服できないわけではありませんが、少し面倒です。私はいくつかの解決策を考えることができます:
- 適切に変更された manage-contextual.pt のコピーを持つ新しい manage-portlets-yourspecialtemplate ビューを追加するだけです。これは最も簡単な方法であり、すべてのポートレット (既存のものを含む) をコンテキストに合わせて編集できます。わーい!
- 私は試していませんが、main_template.pt 以外のテンプレートを使用しているページがホームページだけである場合は、Products.CMFPlone.interfaces.IPloneSiteRoot インターフェイスのポートレットの管理ビューを登録してみてください。同じ名前のビューを追加しようとしたことはありませんが (ただし、異なるインターフェイスに適用されます)、これが機能するかどうかはわかりません。
- 異なるテンプレートを持つページを区別するために使用するものに基づいて、異なるテンプレートを使用する manage-contextual.pt の条件付きロジック。
于 2012-06-22T04:57:17.747 に答える