Plone 在viewlet管理器中将viewlet添加到固定的特定位置 注

Plone 在viewlet管理器中将viewlet添加到固定的特定位置 注,plone,viewlets,Plone,Viewlets,由于该线程的成功结果,提供的链接上的文档已经更新。它不再包含所述的不完整信息 我在获取plone.portalheader viewletManager中显示的viewlets并将其添加到特定位置(不使用线性连接)时遇到问题。我的目标是使html代码看起来与我的html模板模型相同。我不希望也不要求viewlet改变位置,我希望看到其中的两个元素在相同的总体标记中结束 我一直在阅读以下文档,但它似乎与我的设置(即Plone 4.1)相冲突: 我不确定那个特定的页面是否过时或不正确(看起来大多数

由于该线程的成功结果,提供的链接上的文档已经更新。它不再包含所述的不完整信息

我在获取plone.portalheader viewletManager中显示的viewlets并将其添加到特定位置(不使用线性连接)时遇到问题。我的目标是使html代码看起来与我的html模板模型相同。我不希望也不要求viewlet改变位置,我希望看到其中的两个元素在相同的总体标记中结束

我一直在阅读以下文档,但它似乎与我的设置(即Plone 4.1)相冲突:

我不确定那个特定的页面是否过时或不正确(看起来大多数对“tab”的引用都被空格取代了。例如,
现在是
),或者我是否做错了什么(我不会忘记)

当我想调用从示例中创建的新头时,引用
something.header
在我的portal\u header.pt文件中失败。如果有人能看一下这个例子,让我知道是否有任何重要的部分丢失了,这将是一个巨大的帮助我

包括我的代码:

主题/browser/configure.zcml(部分):

主题/浏览器/标题\u items.pt:

<header>
    <div class="container_12">
<div tal:replace="structure view/subviewlets/logo" />

<div tal:replace="structure view/subviewlets/search" />
    </div>
</header

TAL provider:表达式将仅呈现portlet管理器或viewlet管理器。它不适用于Viewlet。这就是为什么示例中有
render\u viewlet(工厂、上下文、请求)
快捷方式

你想要的是

  • 创建一个包含所有布局的viewlet(完成,HeaderViewlet)

  • 将此viewlet放在众所周知的viewlet管理器中(使用/@@manage viewlet来确定是哪个)-这并没有完成

  • 然后在这个新的viewlet中,按您所做的方式渲染子viewlet

如果您需要创建一个新的viewlet管理器(啊,讨厌的工作),您可以按照以下说明操作:


问题中的文档似乎在粘贴过程中的某个点上被损坏了,如果您可以发布示例代码,说明您正在做什么,以及哪些部分出现故障,我已经更新了主要帖子。任何帮助都将不胜感激。我能够成功地按照这些步骤解决我的问题。正如您所指出的,我的问题是,我没有正确地将新的viewlet添加到适当的viewlet管理器中。为了纠正这一点,我在
浏览器:viewlet
中更改了
管理器
属性,以反映新的viewlet管理器。当我这样做的时候,我的模板没有呈现。我需要在必要的viewlet中调整
class
属性,以容纳一个额外的python脚本,该脚本将调整修改后的viewlet的模板路径,在
plone.app.layout.viewlets.common.[class]
中调用公共类时,我实际上是重写了template属性,需要创建一个子类来纠正这个问题。我在过去遇到过这个问题,但在你的帮助下,我能够解决这个问题。再次感谢。请随时清理viewlet文档,以便其他可能尝试这样做的人更清楚地看到:)您在问题中链接的文档,以便它能更清楚地帮助您。我将在提供的链接上更新主要帖子以反映更改的信息。
<header>
    <div class="container_12">
        <div tal:replace="structure provider:theme.header" />
    </div>
</header>
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>
    <div class="container_12">
<div tal:replace="structure view/subviewlets/logo" />

<div tal:replace="structure view/subviewlets/search" />
    </div>
</header
ContentProviderLookupError(u'theme.header',)