使用archetypes.schemaextender,我将一个ImageField添加到ATEvent。
可以在此处找到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
我认为这是因为它是在对象本身上,而不是在适配器上......我怎样才能使它工作?
答案 0 :(得分:2)
如果我没记错的话,Plone中的摘要视图会检查image_thumb。
您的架构扩展器很好,但您错过了改变遍历。为此,您需要修补补丁__bobo_traverse__
。看看ATContentTypes中的ATImage,看看如何做到这一点。
答案 1 :(得分: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(),如上所述。