跳转到主要内容

在创建对象时自动继承父文件夹的分类。

项目描述

完整的readme和doctests在slc/autocategorize/README.txt中

简介

slc.autocategorize使您能够让文件夹内创建的对象自动接收与文件夹相同的分类元数据。

当创建时,包含的对象将接收文件夹的分类。但是,这种影响不是追溯的,并且当您更改文件夹上的分类时,包含的对象不会被重新分类。

工作原理

此产品在所有基于BaseFolder的文件夹上添加了一个布尔字段‘autoCategorizeContent’。当此字段设置为某个文件夹的true时,该文件夹中创建的所有对象将接收文件夹的分类(‘subject’字段的值),以及任何手动设置在对象上的分类。

通过schema-extender适配器添加了‘autoCategorizeNewContent’和‘recursiveAutoCategorization’字段到BaseFolder模式。如果需要,您可以在自己的产品中覆盖此适配器以应用于另一个Archetype类。

见slc.autocategorize.configure.py

如何使用(简单DocTests)

首先,我们创建一个文件夹,我们希望其子文件夹自动分类

>>> self.folder.invokeFactory('Folder', 'documents')
'documents'
>>> folder = self.folder._getOb('documents')

要启用自动分类功能,我们必须设置父文件夹上的‘autoCategorizeContent’字段。

这是一个通过模式扩展添加的字段,因此我们无法使用由Archetypes生成的mutator。

>>> folder.Schema().get('autoCategorizeNewContent').set(folder, True)

让我们对文件夹进行分类

>>> folder.setSubject(['foo', 'bar', 'baz'])

现在我们在该文件夹内创建一个文档并测试它是否被赋予相同的‘subject’值

>>> folder.invokeFactory('Document', 'document1')
'document1'
>>> d1 = folder.get('document1')

通常,当您在Plone中创建一个Archetypes对象时,会调用ObjectInitializedEvent。slc.autocategorize使用此事件来了解何时创建了一个新对象。

这里我们必须手动做

>>> from zope import event
>>> from Products.Archetypes.event import ObjectInitializedEvent
>>> event.notify(ObjectInitializedEvent(d1))

现在我们测试文件夹的分类是否已添加

>>> d1.Subject()
('foo', 'bar', 'baz')

我们还确保在文档从父文件夹接收新类别时,不会删除现有的类别。我们还想确保在子对象已经具有父对象的某个类别时,在自动分类过程中不会重复。

首先我们创建新的对象

>>> folder.invokeFactory('Document', 'document2')
'document2'

然后我们设置类别

>>> d2 = folder.get('document2')
>>> d2.setSubject(['baz', 'buz'])

然后我们调用事件来通知slc.autocategorized一个对象已被创建(在Plone中这是自动发生的)

>>> from Products.Archetypes.event import ObjectInitializedEvent
>>> event.notify(ObjectInitializedEvent(d2))

让我们测试一下类别是否如预期的那样

>>> d2.Subject()
('baz', 'buz', 'foo', 'bar')

最后,我们测试“递归自动分类”功能是否正常工作。首先我们创建一个子文件夹,然后在那个文件夹内创建另一个文档

>>> folder.invokeFactory('Folder', 'sub-folder')
'sub-folder'
>>> subfolder = folder.get('sub-folder')
>>> subfolder.invokeFactory('Folder', 'document3')
'document3'

我们再次需要调用适当的事件

>>> d3 = subfolder.get('document3')
>>> event.notify(ObjectInitializedEvent(d3))

现在我们确保还没有设置任何类别,因为递归功能尚未激活

>>> d3.Subject()
()

好的,现在让我们激活递归

>>> folder.Schema().get('recursiveAutoCategorization').set(folder, True)

然后我们创建一个新的文档

>>> subfolder.invokeFactory('Folder', 'document4')
'document4'
>>> d4 = subfolder.get('document4')
>>> event.notify(ObjectInitializedEvent(d4))

并测试类别是否正确设置

>>> d4.Subject()
('foo', 'bar', 'baz')

变更日志

0.2 (2012-03-21)

  • 修复了当dexterity对象是其中一个父对象时的错误。[jcbrand]

0.1 (2011-09-13)

  • 测试了Plone 4.1

0.1b1 (2010-03-04)

  • 首次发布

项目详情


下载文件

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

源分布

slc.autocategorize-0.2.zip (22.5 kB 查看哈希)

上传时间

支持者: