添加"新闻项目"样式缩略图图像到敏捷内容类型

时间:2014-03-28 17:59:44

标签: plone dexterity

我正在开发一个自定义敏捷内容类型的列表页面,我想拉出其中一个图片显示在列表中,类似于一个充满新闻项目的文件夹的列表页面如何显示标题和描述旁边的缩略图(即folder_summary_view)。

最好的方法是什么?我尝试自定义folder_summary_view模板以更改缩略图代码而不是'item_object/thumbnail',但它会返回错误,因为它是blob图像或其他内容:

<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 

我想我也有兴趣了解如何调用任何其他字段。它会自动提取标题和说明。有没有简单的方法来调用moar字段?即如果有一个名为developer_name的文本字段 - 我将如何在文件夹摘要视图中的标题后显示该字段?

我看到this question以防万一,但它似乎与迁移更相关,而不是显示内容。

2 个答案:

答案 0 :(得分:3)

仍然需要为Plone的默认新闻项更新folder_summary_view,如此(适用于两者; Plone的默认Archetype-和Dexterity-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>

其中&#39;图像&#39;是你的字段名,如果你的不同。

请参阅plone.app.imaging&#39; README以获取完整参考。

我希望很快能找到一些时间来实现这一目标,除非其他人正在努力做到这一点;)

注意:我想我记得不建议使用python:test(),也许这部分也应该调整。

对于通常渲染你的领域,你可以使用好的&#39;:

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

使用TTW创建的Dexterity-CT和文本字段进行测试。

另见(以grokked为例): http://developer.plone.org/reference_manuals/external/plone.app.dexterity/custom-views.html#simple-views

答案 1 :(得分: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创建 getImage imageCaption 标记 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

看看那段代码。