跳转到主要内容

Plone CMS的内容列表

项目描述

此描述适用于 Plone 4.1 及更高版本。

Plone 中许多针对自定义、模板、视图和组件的操作都与内容对象的列表相关。它们的来源可能不同,尽管通常它们是某种目录搜索、特定文件夹的内容或关系对象列表。尽管它们的来源可能不同,尽管通常它们是某种目录搜索、特定文件夹的内容或关系对象列表。

为了简化对这些列表的操作,我们创建了 plone.app.contentlisting,它确保无论对象的来源如何,内容对象的列表总是以相同的方式根据预定义的接口行为。集成者不需要关心对象列表是从目录、ORM 还是将是实际的对象。

创建或获取内容列表

获取内容列表的典型方式是调用两个内置视图之一

列出文件夹或集合的内容

在页面模板中获取文件夹或集合的结果就像这样

context/@@contentlisting

每个模板编写者的梦想 ;)

列出文件夹内容对象的标题的实际示例

<ul>
  <li tal:repeat="item context/@@contentlisting" tal:content="item/Title"/>
</ul>

调用它的上下文定义了要列出的文件夹或查询的集合结果。

您还可以使用 Python 表达式来传递参数,例如,您希望使用的内容类型或审阅状态。

<li tal:repeat="item python:context.restrictedTraverse('@@contentlisting')(portal_type='Document')">

批量操作可以这样做

<ul tal:define="
    Batch python:modules['Products.CMFPlone'].Batch;
    b_size python:int(request.get('b_size', 20));
    b_start python:int(request.get('b_start', 0));
    results python:context.restrictedTraverse('@@contentlisting')(batch=True, b_size=b_size, b_start=b_start);
    batch python:Batch(results, b_size, b_start);">
  <li tal:repeat="item results"
      tal:content="item/Title" />
  <div metal:use-macro="context/batch_macros/macros/navigation" />
</ul>

请注意,您直接遍历从 @@contentlisting 获得的结果。 batch 的定义仅在 batch_macros 调用中使用。

在 Python 中,可以使用以下方式获取特定文件夹内容的内容列表:

>>> path.to.your.folder.restrictedTraverse('@@contentlisting')()

对于集合来说,完全相同

>>> path.to.your.collection.restrictedTraverse('@@contentlisting')()

上述内容列表视图实现了 Plone 中旧的 getFolderContents 脚本所使用的所有逻辑。旧脚本被保留以避免破坏可能依赖于其特定返回值的自定义和插件。

通过适配进行自定义

在撰写本文时,Plone 的所有部分在请求内容列表时还没有返回“内容列表”。由于无法在不破坏向后兼容性的情况下在所有地方进行更改,因此您可能需要手动将您的项目序列转换为内容列表。

为此,您需要导入并适配

>>> from plone.app.contentlisting.interfaces import IContentListing
>>> catalog = getToolByName(self.portal, 'portal_catalog')
>>> results = catalog.searchResults()
>>> contentlist = IContentListing(results)
>>> print(contentlist)
<plone.app.contentlisting.contentlisting.ContentListing object ...>

内容列表、其属性和行为

现在,您不再需要担心您有一堆目录头脑或实际对象(或为了这个目的的虚构对象)。只要您有一个内容列表,您就知道您可以期望从中获得什么。您还知道您可以期望从其中的每个项中获取什么 - 一个内容列表对象。

内容列表是一个普通迭代器,我们可以遍历它并执行与序列相同的各种操作。

contentListingObjects,序列内的项目

《contentListingObjects》是包装对象,每个对象代表网站中的一个内容对象。它们的目的是可预测的,因此您可以始终在列出的对象上调用至少一组公共基方法。

您不必知道对象是从大脑、完整对象还是其他地方起源的。如果您尝试调用对象的方法或访问其属性,而包装器不了解这些方法或属性,它将默默地获取真实对象并将调用委托给它。这意味着您可以像对待任何其他对象一样对待您的对象 - 甚至写入它。

contentListingObjects的方法

getId() -

返回对象在其容器中的ID,例如 my-example-page

getObject() -

返回真实对象

def getDataOrigin() -

对象的来源数据。

getPath() -

对象路径,相对于网站根目录,例如 /artifacts/my-example-page

getURL()-

对象的完整URL,包括网站根目录,例如 http://my.site.com/artifacts/my-example-page

uuid() -

唯一内容标识符,例如来自 plone.uuid 的uuid。它的唯一目的是唯一。例如,它可以看起来像这样 b0e80776-d41d-4f48-bf9e-7cb1aebabad5

getSize() -

字节大小,例如 24

review_state() -

工作流审查状态,例如 已发布

ContentTypeClass() -

用于在列表中识别对象的规范化类型名称。用于CSS样式化,例如 content-type-page

Title() -

返回单个字符串,DCMI Title元素(资源名称)。例如 我的示例页面

Description() -

返回DCMI Description元素(资源摘要)。结果是此对象的自然语言描述。描述是描述对象的纯文本字符串。它不应包含HTML或类似内容。

Type() -

返回DCMI Type元素(资源类型)。结果是资源的可读消息ID(通常是类型信息对象的标题)。例如,来自 plone 域的 u'Page'

listCreators() -

返回DCMI Creator元素(资源作者)的序列。根据实现方式,返回内容对象的作者的全名(或其ID)。例如 Jane Smith

Creator() -

返回第一个DCMI Creator元素或空字符串。例如 Jane Smith

Subject() -

返回DCMI Subject元素(资源关键词)的序列。结果是与内容对象关联的零个或多个关键词。这些是Plone中的标签。例如 ['Ecology', 'Sustainability']

Publisher() -

返回DCMI Publisher元素(资源发布者)。结果是负责发布资源的实体或个人的全正式名称。例如 Plone Foundation

listContributors() -

返回DCMI Contributor元素(资源合作者)的序列。返回零个或多个合作者(超出由 listCreators 返回的合作者)。

Contributors() -

listContributors 的弃用别名。

Date(zone=None) -

返回DCMI Date元素(默认资源日期)。结果是字符串,格式为‘YYYY-MM-DD H24:MN:SS TZ’。zone关键字尚不支持(但它是DublinCore接口的一部分,因此必须保留)

CreationDate(zone=None) -

返回DCMI Date元素(资源创建日期)。结果是字符串,格式为‘YYYY-MM-DD H24:MN:SS TZ’。zone关键字尚不支持(但它是DublinCore接口的一部分,因此必须保留)

EffectiveDate(zone=None) -

返回DCMI日期元素(资源生效的日期)。结果是格式为‘YYYY-MM-DD H24:MN:SS TZ’的字符串,或None。区域关键字尚未支持(但它是DublinCore接口的一部分,需要保留)

ExpirationDate(zone=None) -

返回DCMI日期元素(资源失效的日期)。结果是格式为‘YYYY-MM-DD H24:MN:SS TZ’的字符串,或None。区域关键字尚未支持(但它是DublinCore接口的一部分,需要保留)

ModificationDate(zone=None) -

DCMI日期元素 - 资源最后修改的日期。结果是格式为‘YYYY-MM-DD H24:MN:SS TZ’的字符串。区域关键字尚未支持(但它是DublinCore接口的一部分,需要保留)

Format() -

返回DCMI格式元素(资源格式)。结果是资源的MIME类型(例如:text/htmlimage/png等)。

Identifier() -

返回DCMI标识符元素(资源ID)。结果是资源的唯一ID(一个URL)。

Language() -

DCMI语言元素(资源语言)。结果是资源的RFC语言代码(例如:en-USpt-BR)。

Rights() -

返回DCMI权利元素(资源版权)。返回描述资源的知识产权状态的字符串,如果有。

isVisibleInNav() -

返回此对象是否将在导航视图中可见。

MimeTypeIcon()
如果contenttype存在于MIME类型注册表中,则返回MIME类型图标。

否则返回None。

变更日志

3.0.5 (2024-04-16)

错误修复

  • 在RealContentListingObject中支持image_scales。@davisagli (#64)

3.0.4 (2023-10-07)

内部

  • 更新配置文件。[plone开发者] (cfffba8c)

3.0.3 (2023-04-15)

内部

  • 删除p.a.contenttypes安装依赖项,它实际上只是一种软依赖。这允许打破循环依赖。[gforcada] (#3764)

3.0.2 (2023-04-06)

内部

  • 更新配置文件。[plone开发者] (#47959565)

3.0.1 (2022-12-05)

错误修复

  • 在RealContentListingObject.__getattr__中检查属性是否存在,但不使用acquisition,如果它是需要acquisition的方法,则使用acquisition返回属性。[gbastien] (#47)

3.0.0 (2022-11-30)

错误修复

  • 最终发布。[gforcada] (#600)

3.0.0b1 (2022-08-30)

错误修复

  • 使用绝对URL构建mime-type图标URL。修复了#44 [erral] (#44)

3.0.0a1 (2022-05-14)

重大更改

  • 删除Python 2和Plone 5.2,使用plone.base。[jensens] (#43)

2.0.7 (2022-03-09)

错误修复

  • realobject:在访问返回None的属性时不要抛出AttributeError。[tschorr] (#42)

2.0.6 (2022-01-07)

错误修复

  • 当contenttype不在mimetypes_registry中时,不要抛出错误。[tschorr] (#41)

2.0.5 (2021-11-23)

错误修复

  • 适应Plone 6的测试。[ale-rt] (#39)

2.0.4 (2021-09-15)

错误修复

  • 移除与Products.CMFPlone的循环依赖。[ericof] (#37)

2.0.3 (2020-09-26)

错误修复

  • 修复LazyCat/LazyMap的弃用警告。[maurits] (#3130)

2.0.2 (2020-04-20)

错误修复

  • 小的打包更新。[#1]

2.0.1 (2020-03-21)

错误修复

  • 小的打包更新。[各种] (#1)

  • 初始化towncrier。[gforcada] (#2548)

2.0.0 (2018-10-30)

重大更改

  • 移除Python 2.6支持。[ale-rt]

新功能

  • Python 3支持 [hvelarde, gforcada, davisagli]

  • 使用Products.CMFPlone.utils中的human_readable_size替换getObjSize脚本。#1801 [reinhardt]

错误修复

  • 在Zope4中,_brains不能获取REQUEST。[pbauer]

  • 修复集体索引移动到核心后的测试。[pbauer]

1.3.1 (2017-08-08)

错误修复

  • 修复代码约定。[loechel]

  • 修复在对象没有review_state时查找review_state的错误,例如相关项目(如文件)可能就是这样。[loechel]

1.3.0 (2017-07-03)

新功能

1.2.9 (2017-05-06)

错误修复

  • 删除hasattr。[ivanteoh]

1.2.8 (2016-11-19)

错误修复

  • 删除ZopeTestCase。[ivanteoh, maurits]

1.2.7 (2016-08-19)

错误修复

  • 让getSize在RealContentListingObject上对没有任何主字段的类型起作用。[jensens]

1.2.6 (2016-07-05)

错误修复

  • 为RealContentListingObject添加了缺失的getSize实现。接口在这里未得到满足。[jensens]

1.2.5 (2016-05-12)

修复

  • 从某些方法中删除了docstrings,以避免发布它们。来自Products.PloneHotfix20160419。[maurits]

1.2.4 (2016-02-08)

修复

  • 小的清理(装饰器、utf8头部、…),删除了未使用的导入并修复了依赖项。[jensens]

1.2.3 (2015-11-25)

修复

1.2.2 (2015-09-20)

  • 已删除 ids_not_to_list。请使用“排除于导航之外”设置代替。 [jensens]

1.2.1 (2015-09-11)

  • 实现 CroppedDescription 的裁剪功能。 [pbauer]

1.2 (2015-07-18)

  • 引入 @@contentlisting 视图,它还支持来自 plone.app.contenttypes 的集合,包括结果过滤。这为我们提供了从文件夹或集合列出内容的统一界面。弃用 @@folderListing,以保持 BBB 兼容性。 [thet]

1.1.3 (2015-05-05)

1.1.2 (2015-05-05)

  • Pep8。 [thet]

1.1.1 (2015-03-13)

  • 添加剩余的、已实现但缺失的 IContentListing 接口方法。 [thet]

  • 为内容列表添加 forward getURL 的相对 kw(plone4 兼容) [kiorky]

1.1.0 (2014-04-16)

  • 使用合适的样式指南进行标题。 [polyester]

  • 将 README 移动到 /docs 文件夹。 [polyester]

  • 替换过时的测试断言语句。 [tisto]

  • 删除语言测试并修复图标测试以获取正确的图像。 [bloodbare]

  • 为 Plone 5 使用 PLONE_APP_CONTENTTYPES 固件。 [tisto]

1.0.5 (2013-08-13)

  • 向接口添加缺少的 getDataOrigin 方法。 [timo]

1.0.4 (2013-01-01)

  • 没有变化。

1.0.3 (2012-10-29)

  • 听说我喜欢批量处理是错的。目录结果已经批处理了,所以不要再次批处理它们。 [lentinj]

1.0.2 (2012-10-15)

  • 没有变化。

1.0.1 (2012-04-15)

  • 将 ContentTypeClass 修改为返回 contenttype-{portal_type} 以匹配 Plone 其他部分期望的格式。这修复了基于精灵的页面/文档图标。 [gaudenz]

1.0 - 2011-07-19

  • 删除 searchResults 视图和相关代码。搜索现在由 plone.app.search 处理。 [hannosch]

  • uniqueIdentifier 方法重命名为 uuid 以实现更短、更一致的命名,与 plone.uuid 保持一致。 [hannosch]

0.1b2 - 2011-04-15

  • 为 appendViewAction 编写单元测试,比较 portal_type 而不是 Type。 [lentinj]

  • 在 isVisibleFromNav、appendViewAction 中处理 RealContentListingObject 对象。移除 memoise,因为它不会缓存任何有用的信息。 [lentinj]

0.1b1 - 2011-04-15

  • 添加 isVisibleFromNav 方法,基于 http://siarp.de/node/201,使用 memoise 缓存对 portal_properties 的查找。 [lentinj]

  • 添加 MANIFEST.in。 [WouterVH]

0.1a1 - 2011-03-02

  • 首次发布

项目详细信息


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

plone.app.contentlisting-3.0.5.tar.gz (35.5 kB 查看哈希值)

上传时间

构建分布

plone.app.contentlisting-3.0.5-py3-none-any.whl (23.3 kB 查看哈希值)

上传时间 Python 3

支持

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