Plone内容类型如何作为文件夹而不是事件工作
Plone内容类型如何作为文件夹而不是事件工作
Plone 是一个强大的内容管理系统(CMS),基于 Python 和 Zope 应用服务器。在 Plone 中,内容类型(或称为内容对象)如“文件夹”和“事件”是其数据模型的核心组成部分。如果你希望一个内容类型像文件夹那样行为(即可以包含其他对象),而不是像事件那样(通常用于表示日程安排的单个项目),你可以通过几种方式来实现这一点。1、问题背景:一
Plone内容类型如何作为文件夹而不是事件工作
Plone 是一个强大的内容管理系统(CMS),基于 Python 和 Zope 应用服务器。在 Plone 中,内容类型(或称为内容对象)如“文件夹”和“事件”是其数据模型的核心组成部分。如果你希望一个内容类型像文件夹那样行为(即可以包含其他对象),而不是像事件那样(通常用于表示日程安排的单个项目),你可以通过几种方式来实现这一点。
1、问题背景:
一位用户在 Plone 网站中创建了一个新的内容类型 Multimedia,希望能基于事件类型,但他的代码却只作为文件夹类型工作。其代码如下:
代码语言:javascript代码运行次数:0运行复制from Products.Archetypes import atapi
from Products.CMFCore import utils
def initialize(context):
"""Initializer called when used as a package."""
content_types, ctructors, ftis = atapi.process_types(
atapi.listTypes(PROJECTAME),
PROJECTAME
)
for atype, ctructor in zip(content_types, ctructors):
utils.ContentInit(
"%s: %s" % (PROJECTAME, atype.portal_type),
content_types=(atype,),
permission=DEFAULT_ADD_COTET_PERMISSIO,
extra_ctructors=(ctructor,),
).initialize(context)
2、解决方案:
由于无法直接扩展 ATEvent,因此建议使用 SchemaExtender 来实现该目标。
以下是如何使用 SchemaExtender 实现代码:
代码语言:javascript代码运行次数:0运行复制from Products.Archetypes.ExtensibleMetadata import SchemaExtender
from Products. import ATEvent
class MultimediaSchemaExtender(SchemaExtender):
_ctructors = (ATEvent,)
def __init__(self, context):
super().__init__(context)
self.schema = ATEvent.()
def getSchema(self):
return self.schema
然后, 在 Products.
中注册 MultimediaSchemaExtender
:
from Products.CMFCore import utils
from Products. import MultimediaSchemaExtender
def initialize(context):
"""Initializer called when used as a package."""
content_types, ctructors, ftis = atapi.process_types(
atapi.listTypes(PROJECTAME),
PROJECTAME
)
all_content_types = content_types + []
all_ctructors = ctructors + []
all_ftis = ftis + []
extender = MultimediaSchemaExtender(context)
all_content_types.append(extender)
all_ctructors.append('addMultimedia')
all_ftis.append('Multimedia')
utils.ContentInit(
'%s: %s' % (PROJECTAME, 'Multimedia'),
content_types=all_content_types,
permission=DEFAULT_ADD_COTET_PERMISSIO,
extra_ctructors=all_ctructors,
fti=all_ftis,
).initialize(context)
最终,在configure.zcml
中注册该内容类型:
<adapter factory=".MultimediaSchemaExtender"
for="Products.schemata.ATEventType"
/>
使用上述解决方案,即可将 Multimedia 内容类型设置为基于事件类型。
创建或修改内容类型在 Plone 中是相对高级的操作,通常需要对 Plone 的内部结构和开发实践有一定的了解。如果你是Plone的新手,参考 Plone 社区提供的官方文档和资源,或在 Plone 社区中寻求帮助会非常有用。在进行任何此类修改之前,在开发环境中进行测试以确保新的行为符合大家的期望是非常重要的。
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-23 02:23:21
推荐阅读
留言与评论(共有 13 条评论) |
本站网友 深度水解奶粉 | 15分钟前 发表 |
ctructor in zip(content_types | |
本站网友 房产中介怎么做 | 2分钟前 发表 |
PROJECTAME ) all_content_types = content_types + [] all_ctructors = ctructors + [] all_ftis = ftis + [] extender = MultimediaSchemaExtender(context) all_content_types.append(extender) all_ctructors.append('addMultimedia') all_ftis.append('Multimedia') utils.ContentInit( '%s | |
本站网友 广州治疗尖锐湿疣 | 26分钟前 发表 |
content_types=(atype | |
本站网友 qq临时会话软件 | 22分钟前 发表 |
permission=DEFAULT_ADD_COTET_PERMISSIO | |
本站网友 七叶神安滴丸多少钱一盒 | 0秒前 发表 |
创建或修改内容类型在 Plone 中是相对高级的操作 | |
本站网友 地址转换 | 2分钟前 发表 |
通常需要对 Plone 的内部结构和开发实践有一定的了解 | |
本站网友 鸡骨草的作用 | 16分钟前 发表 |
).initialize(context) 2 | |
本站网友 中南 | 21分钟前 发表 |
super().__init__(context) self.schema = ATEvent.() def getSchema(self) | |
本站网友 城际轨道交通 | 10分钟前 发表 |
因此建议使用 SchemaExtender 来实现该目标 | |
本站网友 西安小吃攻略 | 11分钟前 发表 |
extra_ctructors=all_ctructors | |
本站网友 东方之珠ktv | 13分钟前 发表 |
因此建议使用 SchemaExtender 来实现该目标 | |
本站网友 行房 | 8分钟前 发表 |
以下是如何使用 SchemaExtender 实现代码 |