ノート
このスレッドの成功により、提供されたリンクのドキュメントが更新されました。説明されているように、不完全な情報は含まれなくなりました。
plone.portalheader viewletManagerに表示されるビューレットを取得して特定の場所に追加する際に問題が発生します(線形連結を利用していません)。私の目標は、htmlコードを私のhtmlテンプレートモックアップと同じように見せることです。ビューレットの位置を変更する必要はありません。また、これらの要素のいくつかが同じ包括的なマークアップにまとめられることを望んでいます。
私は次のドキュメントを読んでいますが、私の設定(Plone 4.1)と矛盾しているようです:
その特定のページが古くなっているのか間違っているのか(「タブ」へのほとんどの参照がスペースに置き換えられているように見えます。たとえば、<table>
現在< le>
)、または何か間違ったことをしているのか(過去にはしませんでした)はわかりません。自分)。
例から作成された新しいヘッダーを呼び出したいsomething.header
場合、portal_header.ptファイル内で引用が失敗するようです。誰かが例を見て、重要な部分が欠けているかどうか私に知らせてくれるなら、それは私にとって大きな助けになるでしょう。
私のコードを含める:
theme / browser / configure.zcml(部分):
<!-- The portal header -->
<browser:viewlet
name="plone.header"
manager="plone.app.layout.viewlets.interfaces.IPortalTop"
layer=".interfaces.IThemeSpecific"
class=".header.HeaderViewlet"
template="templates/portal_header.pt"
permission="zope2.View"
/>
テーマ/ブラウザ/テンプレート/portal_header.pt:
<header>
<div class="container_12">
<div tal:replace="structure provider:theme.header" />
</div>
</header>
theme / browser / header.py:
from Acquisition import aq_inner
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from plone.app.layout.viewlets import common as base
#import plonetheme.something.browser.viewlets.common as something #left over from original article
def render_viewlet(factory, context, request):
context = aq_inner(context)
viewlet = factory(context, request, None, None).__of__(context)
viewlet.update()
return viewlet.render()
class HeaderViewlet(base.ViewletBase):
index = ViewPageTemplateFile('header_items.pt')
def update(self):
base.ViewletBase.update(self)
self.subviewlets = {}
def renderViewlet(self, viewlet_class):
return render_viewlet(viewlet_class, self.context, self.request)
def render(self):
self.subviewlets["logo"] = self.renderViewlet(base.LogoViewlet)
self.subviewlets["search"] = self.renderViewlet(base.SearchBoxViewlet)
return self.index()
theme / browser / header_items.pt:
<header>
<div class="container_12">
<div tal:replace="structure view/subviewlets/logo" />
<div tal:replace="structure view/subviewlets/search" />
</div>
</header
上記の記事に従って変更したのはこれだけです。viewlets.xmlを変更する必要があるかどうかわかりません。
この記事について私が理解していることから、header.pyで提供されているクラスを利用してplone.portalheader
、portal_header.ptをオーバーライドして置換したいと考えています。theme.header
ただし、問題があると思われるviewlets.xmlは変更していません。または、configure.zcmlのビューレットの名前をからに変更せずに置き換えplone.portalheader
ているという事実が好きかもしれません。theme.header
plone.header
theme.header
私は解決策であると信じているものについてたくさんの順列を試しましたが、viewlets.xmlを変更しようとしても、何も機能しません。
例に従うと、次のようなエラーメッセージが表示されます。
ContentProviderLookupError(u'theme.header',)