无法查看基于Archetypes的内容类型

时间:2017-10-02 11:02:00

标签: plone plone-4.x archetypes

我有一个小的Plone扩展,其中包含一个简单的基于Archetypes的内容类型(与我无法添加TTW相同,请参阅my previous question);项目设置为on GitHub

添加对象后,我在执行KeyError: 'view'内容提供商时获得plone.abovecontenttitle

{'container': <MyType at /plone/test-for-new-types/a-mytype-object>,
 'context': <MyType at /plone/test-for-new-types/a-mytype-object>,
 'default': <object object at 0x7fc4f8ebe520>,
 'here': <MyType at /plone/test-for-new-types/a-mytype-object>,
 'loop': {},
 'nothing': None,
 'options': {'args': ()},
 'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0x7fc4c9484db8>,
 'request': <HTTPRequest, URL=https://my.testing.site/test-for-new-types/a-mytype-object/mytype_view>,
 'root': <Application at >,
 'template': <FSPageTemplate at /plone/test-for-new-types/a-mytype-object/mytype_view>,
 'traverse_subpath': [],
 'user': <PloneUser 'me'>}

develop模式下安装我的小扩展程序时,它应该可以轻松复制。

修改 我注意到,在“已安装的产品”视图(/portal_quickinstaller/MyCompany.MyProduct/manage_installationInfo)中,我的产品有Status: installedTypes MyType,但Content Type Registry entries为空(None)。

1 个答案:

答案 0 :(得分:2)

与基于浏览器的模板相反,内容提供者调用适配器,它们期望存在view - 参数[1]并且基于皮肤的模板不提供。 要解决这个问题,我们可以使用@@plone中完成的全局main_template - var [2],因为@@ploneBrowserView的一个实例,它提供了view-argument:

tal:define="view context/@@plone;"

这让我觉得,内容提供商正在使用的适配器应该考虑没有可用视图的情况。

如果您想拥有通常的网站结构并且只是自定义内容部分,您还可以将模板填充到内容槽中,然后继承main_template中的所有内容,以及view-var:

<metal:main metal:use-macro="context/main_template/macros/master">
  <metal:content fill-slot="content">
    Hey, a working content-provider:
    <div tal:replace="structure provider:plone.abovecontenttitle" />
    Oh, so much more much, here...
  </metal:content>
</metal:main>

我会推荐,因为那样你就不必担心在标题部分做正确的事了。例如。使用&#34; raiseAnon&#34;不应该是必要的,因为项目的工作流状态正在处理,并且会评估当前语言等等。

如果您只想自定义内容项的正文部分,请将content更改为content-core,无论如何都会呈现通常的内容提供商,您不需要插入它们,如果你想按照通常的顺序。

[1] https://docs.plone.org/4/en/old-reference-manuals/portlets/rendered.html

[2] https://github.com/plone/Products.CMFPlone/blob/master/Products/CMFPlone/browser/ploneview.py