2014-02-24 6 views
3

다른 콘텐츠 유형에 대한 다양한보기를 만들고 등록했습니다. 그들은 잘하고 있지만 이미지 및 파일 이외의 콘텐츠 형식에만 작동합니다. 이미지 콘텐츠 유형에 대해보기를 사용할 수 없습니다.이미지에 대한보기를 등록하는 방법 content_type?

이미지에는 레이아웃 메뉴가 없습니다. 그럼에도 불구하고보기는 /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') 

Products.CMFDynamicViewFTI-4.0.5-py2.7.egg/Products/CMFDynamicViewFTI/browserdefault.py 반환 없음

에서 getAvailableLayouts()의 다음 호출
view = zope.component.queryMultiAdapter((self, self.REQUEST), 
             zope.interface.Interface, 
             name='image_view') 

이미지 및 파일보기를 등록하는 방법에 대한 힌트가 있습니까?

코딩 내 모든 뷰와 유사하며 여기 (문서에 대한 예제와 이미지)를 재생 :

/browser/about_view.py

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

에서

<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/configure.zcml에서 /profiles/default/types/Document.xml

에서
<object name="Document"> 
    <property name="view_methods" purge="False"> 
     <element value="about-view"/> 
    </property> 
</object> 
에서 /profiles/default/types/Image.xml

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

에서 /browser/camera_view.py

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

에서 16,

<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> 

답변

4

가 Plone에 4 개의 이미지 (파일)은 블롭 - 기반 실제로 Plone에 발 ATBlob의 인스턴스 .app.blob이 아니라 ATImage.

ATImage 클래스 대신 이미지 인 모양의 표식으로 사용되는 plone.app.blob.interfaces.IATBlobImage 인터페이스에 대한보기를 등록해야합니다.

+1

대단히 감사합니다! 'ATBlob'의 클래스 정의를 읽은 후에,'__repr __()'이'replace (ATBlob .__ name__, 'ATImage', 1)'로 수정 될 수는 없습니다. 이것은 잠시 동안 나를 괴롭혔다. Plone Lord는 신비한 방식으로 움직입니다. ;-) – wolfrevo

+1

오, 이런, 그건 나쁘지. 기존 테스트를 새 구현과 함께 유지하려고 노력하는 것은 어리석은 일이라고 생각합니다. –