无法查看我的基于原型的内容类型
My Archetypes-based content type can't be viewed
我有一个小的 Plone 扩展,其中包含一个简单的基于原型的内容类型(与我无法添加 TTW 的内容类型相同,请参阅 ); the project setup is on GitHub。
添加对象后,我在执行 plone.abovecontenttitle
内容提供程序期间得到 KeyError: 'view'
:
{'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
模式下应该可以轻松重现。
编辑:
我注意到,在 "Installed Product" 视图 (/portal_quickinstaller/MyCompany.MyProduct/manage_installationInfo
) 中,我的产品有 Status: installed
和 Types MyType
,但 Content Type Registry entries
是空的 (None
) .
Content-providers 调用适配器,它期望 view
参数存在 [1] 而 skin-based 模板不提供,这与 browser-based 模板相矛盾.
要解决这个问题,我们可以像在 main_template
中那样使用全局 @@plone
-var[2],因为 @@plone
是 BrowserView
的一个实例,它提供了 view-argument:
tal:define="view context/@@plone;"
这让我想到,content-providers 正在使用的适配器应该考虑到没有可用视图的情况。
如果您想拥有通常的 site-structure 而只是自定义 content-part,您还可以将模板填充到 content-slot,然后 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>
我会推荐,因为这样您就不必担心在 header-part 中做每件事。例如。使用 "raiseAnon" 应该不是必需的,因为项目的 workflow-state 正在处理这个问题,并且将评估当前语言等内容。
如果你只想自定义content-item的body-part,将content
改为content-core
,那么通常的content-providers就会被渲染, 如果您希望按通常顺序插入它们,则无需插入它们。
[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
我有一个小的 Plone 扩展,其中包含一个简单的基于原型的内容类型(与我无法添加 TTW 的内容类型相同,请参阅
添加对象后,我在执行 plone.abovecontenttitle
内容提供程序期间得到 KeyError: 'view'
:
{'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
模式下应该可以轻松重现。
编辑:
我注意到,在 "Installed Product" 视图 (/portal_quickinstaller/MyCompany.MyProduct/manage_installationInfo
) 中,我的产品有 Status: installed
和 Types MyType
,但 Content Type Registry entries
是空的 (None
) .
Content-providers 调用适配器,它期望 view
参数存在 [1] 而 skin-based 模板不提供,这与 browser-based 模板相矛盾.
要解决这个问题,我们可以像在 main_template
中那样使用全局 @@plone
-var[2],因为 @@plone
是 BrowserView
的一个实例,它提供了 view-argument:
tal:define="view context/@@plone;"
这让我想到,content-providers 正在使用的适配器应该考虑到没有可用视图的情况。
如果您想拥有通常的 site-structure 而只是自定义 content-part,您还可以将模板填充到 content-slot,然后 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>
我会推荐,因为这样您就不必担心在 header-part 中做每件事。例如。使用 "raiseAnon" 应该不是必需的,因为项目的 workflow-state 正在处理这个问题,并且将评估当前语言等内容。
如果你只想自定义content-item的body-part,将content
改为content-core
,那么通常的content-providers就会被渲染, 如果您希望按通常顺序插入它们,则无需插入它们。
[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