创建对象时自动继承父文件夹的类别。
slc.autocategorize的Python项目详细描述
SLC/autocategorize/readme.txt中的完整自述文件和文档测试
简介
autocategor_ze允许您让在文件夹中创建的对象 自动接收与文件夹本身相同的类别元数据。
包含的对象在其 被创造出来。但是,当您更改 类别在文件夹中,包含的对象将不会重新分类。
工作原理:
此产品在所有基本文件夹上添加布尔字段“autocategorizecontent” 基于文件夹。当某个文件夹的此字段设置为true时,所有 在该文件夹中创建的对象将接收该文件夹的类别( “主题”字段的值)以及在 反对。
添加“autocategorizenewcontent”和“recursiveautocategorization”字段 通过架构扩展器适配器发送到基本文件夹架构。你可以覆盖这个 在您自己的产品中的适配器适用于另一个原型类,如果 必要*。
请参阅slc.autocategorize.configure.py
如何使用(简单的doctests):
首先,我们创建一个文件夹,我们希望对其子项进行分类 自动:
>>> self.folder.invokeFactory('Folder', 'documents') 'documents' >>> folder = self.folder._getOb('documents')
要启用自动分类功能,必须设置“autocategorizecontent” 父文件夹上的字段。
这是通过模式扩展添加的字段,因此我们不能使用原型 产生变异。
>>> folder.Schema().get('autoCategorizeNewContent').set(folder, True)
让我们对文件夹进行分类:
>>> folder.setSubject(['foo', 'bar', 'baz'])
我们现在在这个文件夹中创建一个文档并测试它是否 被赋予相同的“主题”值:
>>> folder.invokeFactory('Document', 'document1') 'document1' >>> d1 = folder.get('document1')
通常,当您在plone中创建一个原型对象时, 对象化事件被调用。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))
现在我们确保now类别已经设置好了,因为递归 功能尚未激活:
>>> 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)
- 搞错了。当灵巧的物体是父母之一时,不要折断。[JCbrand]
0.1(2011-09-13)
- 测试PLONE 4.1
0.1b1(2010-03-04)
- 初始版本