提供结果渲染引擎的库
项目描述
概述
本模块提供结果渲染功能。目的是避免重复编写愚蠢的视图逻辑。
结果的结构通过ZCML定义。要使框架最终渲染结果,必须子类化框架提供的一些基础实现,例如提供渲染信息,如批词汇、结果切片等。
目前,框架提供批处理和切片功能,未来将扩展以提供定义结果排序机制、嵌套批处理和更详细切片定义的功能。
有关如何实现结果的第一个示例,请参阅:https://svn.plone.org/svn/collective/Directory
每个定义的结果都作为ViewletManager内部注册,并且通过调用页面模板中的内容提供者进行渲染,例如。
<tal:block tal:replace="structure provider:directory.directorylisting" />
在ZCML中的结果定义如下
<configure xmlns="http://namespaces.zope.org/cornerstone"> <result for="Products.Directory.content.interfaces.IDirectory" class=".browser.directory.DirectoryListingResult" permission="zope.Public" name="directory.directorylisting" threshold="0"> <batch domain="directorybatch" vocab=".browser.directory.DirectoryBatchVocab" /> <slice class=".browser.directory.DirectoryListingSlice" name="directoryslice" template="templates/directory_listing.pt" allowed_interface="Products.Directory.browser.interfaces.IDirectoryListing" /> <batch domain="directorybatch" /> </result> </configure>
请注意,如果您想渲染同一批处理两次,例如在切片的上方和下方,您只需定义一次批处理定义,然后通过定义批处理域将其添加第二次。
结果可以具有以下属性
for="*"(结果绑定到的接口)
class=“.env.TestResult”(提供结果的类本身)
permission=”zope.Public”(查看结果的权限)
name=’testresult’(作为内容提供者调用的名称)
slicesize=”20”(结果切片的大小,可选)
threshold=”20”(显示批次的阈值,即需要多少个结果才显示批次,可选)
批次可以有以下属性
domain=”testbatch”(批次的域。用于区分同一页面上的其他渲染批次)
vocab=”.env.TestBatchVocab”(提供批次词汇的类)
template=”templates/batch.pt”(用于渲染批次的模板,可选)
firstpagelink=”True”(是否显示第一页链接的标志,可选)
lastpagelink=”True”(是否显示最后一页链接的标志,可选)
prevpagelink=”True”(是否显示上一页链接的标志,可选)
nextpagelink=”True”(是否显示下一页链接的标志,可选)
batchrange=”30”(批次范围。定义显示的页面数量,例如“<< < … 5 6 7 8 … > >>”,可选)
masters=”anotherbatchdomain”(定义批次依赖的批次(s),其值必须是您想要考虑的批次的域)
title=”The Title”(可选的标题,用于标记批次)
forcedisplay=”True”(可选的标志,用于强制显示批次或不是)
querywhitelist=”sort”(生成url时考虑的查询参数。如果您需要在切片中使用一些额外的参数,则需要此功能)
切片定义被视为视图定义,因此遵循
视图定义规则
class=“.browser.directory.DirectoryListingSlice”
name=”directoryslice”
template=”templates/directory_listing.pt”
allowed_interface=”Products.Directory.browser.interfaces.IDirectoryListing”
上述示例实现了一个字母批次的目录列表并
子类化这些对象
cornerstone.ui.result.result.ResultBase
cornerstone.ui.result.batch.AlphaBatchVocabBase
cornerstone.ui.result.slice.AlphaBatchedSliceBase
结果类
class DirectoryListingResult(ResultBase): name = 'directory.directorylisting' @property def results(self): return self._getEntries({ 'meta_type': 'DirectoryEntry', 'path': '/'.join(self.context.getPhysicalPath()), }) def _getEntries(self, query): catalog = getToolByName(self.context, 'membrane_tool') brains = catalog(**query) entries = [] for brain in brains: entry = dict() entry['name'] = brain.Title entry['email'] = brain.getEmail entry['url'] = brain.getURL() entry['review_state'] = brain.review_state entries.append(entry) return entries
考虑
由于没有有效的方法可以确定特定ViewletManager的注册名称,因此您必须提供名称属性。
此外,您必须提供结果。在上面的示例中,它是一个字典列表。当然,这是当前框架可以很好地处理的格式(字典列表)。将来,也将有能够处理基于目录大脑的基类实现。
实现结果的类被其他需要的类用于提取批次信息和切片信息
批次词汇类
# pages definitions will be looked up by an adapter in future pages = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ] class DirectoryBatchVocab(AlphaBatchVocabBase): @property def vocab(self): visibles = self.getVisiblesFromDictList('name') return self.generateVocab(visibles, pages)
考虑
基类AlphaBatchVocabBase可以处理结果是字典列表的结果,并为您做了大部分工作。如前所述,也应有一个基于大脑结果列表的基类实现。
页面列表需要计算字母批次(对于数字批次不是必需的)并且必须在定义批次词汇和结果切片的类中可用,如下所示。这应该在未来的接口中查找
切片类
class DirectoryListingSlice(AlphaBatchedSliceBase): @property def entries(self): key = 'name' batchname = 'directorybatch' self.pages = pages self.sortResults(key) current = self.determineCurrentPage(batchname, key) return self.generateCurrentSlice(current, key)
启用KSS
KSS在应用扩展配置文件时默认启用。
要为匿名用户启用kss,您必须更改portal_javascripts资源注册中的kukit.js的条件。
考虑
在这个子类中,对于结果应用的规则与批次词汇基类相同。
您必须提供此切片使用的批次名称
这里也使用了全局页面。请参阅框架为何处于alpha状态的解释。
致谢
这个库是联合国国际劳工组织Better Work项目的成果。
- 由Robert Niederreiter <rnix@squarewave.at>编写,
Squarewave Computing,奥地利 - 蓝色动力联盟
- 感谢Jens Klein <jens@bluedynamics.com>在研究和
设计想法
感谢Radim Novotny
novotny.radim@gmail.com> 对错误修复和测试的贡献 - 感谢Lukas Zdych
lukas.zdych@corenet.cz> 批量范围实现和测试 实现
- 感谢Lukas Zdych
更改
1.1.4 (svn)
修复数字切片默认页面 (rnix, 2010-06-16)
1.1.3
使alpha批量非ASCII识别 (rnix, 2010-06-15)
1.1.2
在batch.py中使请求参数的值支持Unicode (rnix, 2010-04-13)
1.1.1
将URL查询数据写入KSS视图中的self.request.form而不是self.request (rnix, 2009-03-25)
项目详情
cornerstone.ui.result-1.1.4.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cd3d6e6daa0cf8561a0075095113e0071c314d72fe34476fc43383851b860340 |
|
MD5 | b6b7162e363388aa3398a226c22b67a3 |
|
BLAKE2b-256 | 645a07137da3d04fed1860316f742bd9c3f2c2ecec58f42e1344a7b1c20cd98b |