2014-03-28 46 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 

查看该代码。

相关问题