Plone 3:如何在页面模板中加载收集结果

时间:2014-01-23 20:31:08

标签: plone zope

我正在尝试在页面模板中显示三个集合的结果。我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:1)

我找到了解决方案。

示例:

<ul tal:repeat="data context/list-open/queryCatalog">
    <li tal:content="data/Title">title</li>
</ul>

对象“list-open”是集合。

答案 1 :(得分:1)

对于TTW解决方案,如果只需要在一个位置,也可以安装Products.ContentWellPortlets,创建一个页面并为页面分配三个集合portlet。

答案 2 :(得分:0)

首先,您需要创建一个browserView。

在此browserView中,添加一个返回合并的3个集合的方法,您可以在结果列表中进行某种排序或其他处理。

def myNewCompiledCollection(self):
    """ """
    list1 = self.context.list1.queryCatalog()
    list2 = self.context.list2.queryCatalog()
    list3 = self.context.list3.queryCatalog()
    resultList = list1 + list2 + list3
    return resultList

在浏览器模板中,只需执行以下操作:

<ul tal:repeat="data view/myNewCompiledCollection">
    <li tal:content="data/Title">title</li>
</ul>

答案 3 :(得分:0)

只需将每个集合的结果添加到列表中,您就可能在结果中获得重复的条目。

brains1 = collection1.ueryCatalog()
brains2 = collection2.ueryCatalog()
brains3 = collection3.ueryCatalog()

results = brains1 + brains2 + brains3

afaik你不能使用一套来清理你的清单,因为同一个对象的大脑不一定是同一个对象。 所以这很可能也不起作用:

set(results)
然而,您可以从集合中提取查询并使用Products.AdvancedQuery或 - 可能更容易实现 - 将结果列表转换为uid列表并进行附加目录搜索:

uids = [brain.UID for brain in results]
results_without_dups = catalog(UID=uids)