如何为图像content_type注册View?

时间:2014-02-24 17:33:42

标签: plone plone-4.x

我已为不同的内容类型创建并注册了不同的视图。它们正常工作,但仅适用于Image和File以外的内容类型。我无法使视图可用于图像内容类型。

图像根本没有布局菜单。尽管如此,观看次数仍显示在/Plone/portal_view_customizations

Products.ATContentTypes.content.document.ATDocument
    about-view (zope.publisher.interfaces.browser.IDefaultBrowserLayer)
Products.ATContentTypes.content.image.ATImage
    camera-view (zope.publisher.interfaces.browser.IDefaultBrowserLayer)

getAvailableLayouts返回图像的空列表和文档的非空列表:

>>> image.getAvailableLayouts()
[]
>>> image.getTypeInfo().getAvailableViewMethods(image)
('image_view', 'camera-view')
>>> page.getAvailableLayouts()
[('about-view')]
>>> page.getTypeInfo().getAvailableViewMethods(page)
('document_view', 'about-view')

getAvailableLayouts()中的Products.CMFDynamicViewFTI-4.0.5-py2.7.egg/Products/CMFDynamicViewFTI/browserdefault.py中的以下调用返回无

view = zope.component.queryMultiAdapter((self, self.REQUEST),
                                         zope.interface.Interface, 
                                         name='image_view')

任何提示如何注册图像和文件的视图?

我的所有观点的编码都类似,并在此处复制(文档和图像的示例):

/browser/configure.zcml

<browser:page
    for="Products.ATContentTypes.content.image.ATImage"
    name="camera-view"
    class=".camera_view.CameraView"
    permission="zope2.View"
    template="camera_view.pt"
    />

<browser:page
    for="Products.ATContentTypes.content.document.ATDocument"
    name="about-view"
    class=".about_view.AboutView"
    permission="zope2.View"
    template="about_view.pt"
    />

/browser/about_view.py

from Products.Five import BrowserView
class AboutView(BrowserView):
    """ """

/profiles/default/types/Document.xml

<object name="Document">
    <property name="view_methods" purge="False">
        <element value="about-view"/>
    </property>
</object>

/browser/camera_view.py

from Products.Five import BrowserView
class CameraView(BrowserView):
    """ """

/profiles/default/types/Image.xml

<object name="Image">
    <property name="view_methods" purge="False">
        <element value="camera-view"/>
    </property>
</object>

/profiles/default/types.xml

<object name="portal_types" meta_type="Plone Types Tool">
    <object name="Document" meta_type="Factory-based Type Information with dynamic views"/>
    <object name="Image" meta_type="Factory-based Type Information with dynamic views"/>
</object>

1 个答案:

答案 0 :(得分:4)

在Plone 4中,图像(和文件)是基于blob的,实际上是来自plone.app.blob的ATBlob实例,而不是ATImage。

您应该为plone.app.blob.interfaces.IATBlobImage接口注册视图,该接口用作图像blob上的标记,而不是ATImage类。