提供结果渲染引擎的库
项目描述
概述
本模块提供结果渲染功能。目的是避免重复编写愚蠢的视图逻辑。
结果的结构通过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 |