2014-03-28 44 views
2

我正在爲自定義敏捷內容類型創建列表頁面,並且希望將其中一個圖像顯示在列表中,類型新聞文件夾的列表頁面如何顯示標題和說明旁邊的縮略圖(即folder_summary_view)。將「新聞項目」樣式縮略圖圖像添加到敏捷內容類型

這是什麼最好的方法呢?我嘗試定製folder_summary_view模板來更改縮略圖代碼,改爲尋找'item_object/thumbnail'然而,因爲這是一個團塊圖像或東西返回一個錯誤:

<a href="#" tal:condition="exists:item_object/thumbnail" 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:item_object/thumbnail')(scale='original', css_class='tileImage')" /> 
</a> 

返回:

Module Products.PageTemplates.ZRPythonExpr, line 48, in __call__ 
    __traceback_info__: path('nocall:item_object/thumbnail')(scale='original', css_class='tileImage') 
    Module PythonExpr, line 1, in <expression> 

TypeError: 'NamedBlobImage' object is not callable 

我想我會也有興趣瞭解如何打電話給其他任何領域。它自動提取標題和描述。有沒有簡單的方法來調用mo fields領域?即如果有一個文本字段名爲:developer_name - 我將如何在文件夾摘要視圖中的標題之後顯示該字段?

我看到this question萬一有幫助,但它似乎更關係到遷移和不顯示內容。

+0

還要感謝Martijn P的回答,這個回答一如既往的全面,完整並將其解釋清楚。 –

+2

這個問題的最佳答案!我想補充一點,爲Plone 5提供基本內容類型的plone.app.contenttypes具有「LeadImage」行爲,允許任何敏捷內容類型具有像新聞項目一樣的主導圖像。實施細節在https://github.com/plone/plone.app.contenttypes/blob/master/plone/app/contenttypes/behaviors/leadimage.py – SteveM

回答

3

的folder_summary_view仍然需要對Plone的默認新聞條目進行更新,這樣的(可工作在; Plone的默認Archetype-和敏捷-newsitem):

  <a href="#" 
       tal:condition="exists:item_object/@@images/image" 
       tal:attributes="href python:test(item_type in use_view_action, item_url+'/view', item_url)"> 
       <img src="" alt="" 
        tal:replace="structure item_object/@@images/image/mini" /> 
      </a> 

其中「形象」是字段名,在你的情況不同。

請參閱plone.app.imaging的README以獲取完整參考。

我希望能儘快找到一些時間,提交本,除非別人是標題做;)

注:我想我還記得它是不推薦使用python:test()不過,也許這部分應調整也是。

對於一般的渲染你的領域,你可以用好醇':

<div tal:content="structure context/developer_name" /> 

測試與TTW創建敏捷-CT和文本字段。

參見(帶grokked爲例): http://developer.plone.org/reference_manuals/external/plone.app.dexterity/custom-views.html#simple-views

+0

這絕對奏效,謝謝艾達! :) – feesh

+1

非常歡迎您,感謝您將翡翠衝刺的視頻展示放在線上,讓人們可以看到成爲Plone世界的一部分是多麼的酷炫:)我希望您也可以獲得任意的字段名稱,現在。順便說一句,Hector的答案基本上是一個長形式的符號(如果你測試過:它是否和Dex一起工作?),另請參閱p.a.imaging的doc。 –

1

如果你仔細觀察的folder_summary_view template你會發現,所有你需要做的是添加一些輔助方法給你的類:

<a href="#" 
    tal:condition="exists:item_object/image_thumb" 
    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:item_object/tag')(scale='thumb', css_class='tileImage')" /> 
</a> 

we did something similar in collective.nitf通過創建的getImageimageCaption標籤image_thumb函數(你可能不需要它們全部)。

另外,請注意圖片屬性,它將映射getImage函數。

class NITF(Container): 
    implements(INITF) 
    ...  
    # The purpose of these methods is to emulate those on News Item 
    def getImage(self): 
     """Return the first Image inside the News Article.""" 
     content_filter = {'portal_type': 'Image'} 
     images = self.listFolderContents(content_filter) 
     return images[0] if len(images) > 0 else None 

    image = getImage # XXX: a hack to support summary_view 

    def imageCaption(self): 
     image = self.getImage() 
     if image is not None: 
      return image.Description() 

    def tag(self, **kwargs): 
     # tag original implementation returns object title in both, alt and 
     # title attributes 
     image = self.getImage() 
     if image is not None: 
      scales = image.restrictedTraverse('@@images') 
      if 'scale' in kwargs: 
       scale_id = kwargs.get('scale') 
       del kwargs['scale'] 
      else: 
       scale_id = 'thumb' 
      kwargs['alt'] = image.Description() 
      kwargs['title'] = image.Title() 
      scale = scales.scale(fieldname='image', scale=scale_id) 
      return scale.tag(**kwargs) 

    def image_thumb(self): 
     """Return a thumbnail.""" 
     image = self.getImage() 
     if image is not None: 
      view = image.unrestrictedTraverse('@@images') 
      # Return the data 
      return view.scale(fieldname='image', scale='thumb').data 

查看該代碼。

相關問題