注记
由于这个线程的成功结果,提供的链接上的文档已经更新。它不再包含所描述的不完整信息。
我在获取出现在plone.portalheader viewletManager中的视图并将它们添加到特定位置时遇到了问题(没有使用线性级联)。我的目标是使html代码看起来与我的html模板模型相同。我不想也不需要视图来改变位置,我希望看到其中的几个元素在相同的总体标记中结束。
我一直在阅读以下文档,但它似乎与我的设置(即Plone 4.1)相冲突:
http://collective-docs.readthedocs.org/en/latest/views/viewlets.html#rendering-viewlets-with-accurate-layout
我不确定那个特定的页面是过时的还是不正确的(看起来大多数对"tab“的引用都被空格所取代了。<table>
现在是< le>
),或者如果我做错了什么事情(我不会忘记它)。
看起来,当我想调用从示例中创建的新头时,引用something.header
在我的portal_header.pt文件中失败。如果有人能看到这个例子,并让我知道是否有任何重要的部分缺失,这将是一个巨大的帮助我。
包括我的代码:
主题/browser/figurre.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"
/>
主题/浏览器/模板/门户_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()
主题/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。
根据我对本文的理解,它希望通过使用plone.portalheader
中提供的类来覆盖portal_header.pt中的theme.header
并将其替换为theme.header
。然而,我并不是在修改viewlets.xml,因为我认为问题就在这里。或者,我要用theme.header
代替theme.header
,并且不会将configure.zcml中的视图名称从plone.header
更改为theme.header
。
我已经尝试了一堆我认为是解决方案的排列,我无法让任何东西工作,甚至试图修改viewlets.xml。
当我遵循这个例子时,我会收到一条错误消息,上面写着:
ContentProviderLookupError(u'theme.header',)
发布于 2012-02-01 21:13:13
TAL提供者:表达式将只呈现portlet管理器或视图管理器。它不适用于视图。这就是为什么在示例中有render_viewlet(factory, context, request)
快捷方式的原因。
你想要的是
创建一个包含所有布局的视图(已完成,HeaderViewlet)
一样。
如果您需要创建一个新的视图管理器(嗯,屁股上的痛苦和糟糕的工作),您可以按照这里的说明:
http://opensourcehacker.com/2011/11/29/creating-a-viewlet-manager-in-plone/
https://stackoverflow.com/questions/9086777
复制相似问题