1

通过archetypes.schemaextender,我向ATEvent 添加了一个ImageField。

extender.py 的代码可以在这里找到:http: //pastealacon.com/29670

在 configure.zcml 我有这个:

<include package="archetypes.schemaextender" />
<adapter for="Products.ATContentTypes.interface.IATEvent"
    factory=".extender.ContentImageExtender" />

这项工作非常好,当我编辑 ATEvent 时,我看到了我的字段,没问题。

但是,在摘要视图中,exists:item_object/image 返回 False

我认为这是因为它在对象本身上,而不是在适配器上......我怎样才能让它工作?

4

2 回答 2

2

如果您想访问模式扩展字段,则不能依赖 Archetypes 通常会自动为您创建的访问器,因为当时 Archetypes 还不知道模式扩展字段。

相反,您必须调用 Schema() 方法,该方法将获取对象的正常模式以及所有扩展字段。从中您可以获取该字段并调用其访问器。

所以你可以得到这样的图像:

item_object.Schema().getField('image').getAccessor(item_object)()

我查看了 folder_summary_view.pt 模板,您必须将代码更改为如下所示:

<a href="#"
   tal:define="image python:item_object.Schema().getField('image');
               image python:image and image.getAccessor(item_object)();"
   tal:condition="image"
   tal:attributes="href python:test(item_type in use_view_action, item_url+'/view', item_url)">
   <img src="" alt=""
        tal:replace="structure python:path('nocall:image/tag')(scale=0.5, css_class='tileImage')" />
</a>

然后它将起作用。

编辑:您也可以走 ggozad 建议的路线。在您的bobo_traverse方法中,您仍然必须通过首先调用 Schema() 来获取该字段,如上所述。

于 2012-02-09T16:33:55.873 回答
2

如果我没记错的话,Plone 中的摘要视图会检查 image_thumb。您的架构扩展器很好,但您错过了更改遍历。为此,您需要猴子补丁__bobo_traverse__。查看 ATContentTypes 中的 ATImage 以了解如何执行此操作。

于 2012-02-09T16:29:33.390 回答