跳转到主要内容

提供结果渲染引擎的库

项目描述

概述

本模块提供结果渲染功能。目的是避免重复编写愚蠢的视图逻辑。

结果的结构通过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> 批量范围实现和测试

    实现

更改

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 (18.5 kB 查看哈希值)

上传时间 源代码

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面