笔记
由于此线程的成功结果,提供的链接中的文档已更新。它不再包含所描述的不完整信息。
我在获取出现在 plone.portalheader viewletManager 中的 viewlet 并将它们添加到特定位置(不使用线性连接)时遇到问题。我的目标是使 html 代码看起来与我的 html 模板模型相同。我不希望也不要求 viewlet 改变位置,我希望看到其中的几个元素最终出现在同一个总体标记中。
我一直在阅读以下文档,但它似乎与我的设置(即 Plone 4.1)冲突:
我不确定该特定页面是否已过时或不正确(看起来大多数对“标签”的引用都被替换为空格。例如,<table>
现在< le>
)或者我做错了什么(我不会把它过去我)。
看起来当我想调用从示例创建的新标头时,something.header
在我的 portal_header.pt 文件中引用失败。如果有人可以观察这个例子并让我知道是否缺少任何重要部分,那对我来说将是一个巨大的帮助。
包括我的代码:
主题/浏览器/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>
主题/浏览器/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()
主题/浏览器/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,这是我认为问题所在。或者它可能喜欢我正在替换的事实,plone.portalheader
并且theme.header
我没有将 configure.zcml 中的 viewlet 的名称从plone.header
to更改为theme.header
。
我已经尝试了一大堆我认为是解决方案的排列,但我无法得到任何工作,甚至尝试修改 viewlets.xml。
当我按照示例进行操作时,我收到一条错误消息,内容为:
ContentProviderLookupError(u'theme.header',)