1

我根据Plone.org 的说明为我的内容类型添加了一个 FieldIndex 。

在 ZMI 中,我可以在/mysite/portal_catalog/Indexes/Building. 我的内容类型(提供IMyType,有一个字段building)是文件夹,并且包含一张照片(提供IPhoto,没有building字段)作为profiles/default/types/MyType.xml文件中的 allowed_content_types。

我只想为 MyType 的构建字段建立索引。但是,似乎 Photo 类型的项目使用其父项的值进行索引。这很烦人。代码是否@indexer(IMyType)意味着索引 IMyType 及其包含的类型?如何仅为 IMyType 编制索引?

4

2 回答 2

2

索引器所做的是直接从被索引的对象中获取属性。在作为特殊包装器的 Plone 中,@indexer如果它们存在,它将使用已注册的索引器(如使用装饰器创建的)。

但是,如果您的索引恰好是索引building并且这也是您的IMyType对象直接的属性,那么任何包含的对象也将通过获取具有该属性。注册索引器IMyType并不能阻止这一点。

有几种方法可以解决这个问题:

  1. 为您的索引器使用一个不同的名称,一个与属性名称不匹配的名称。请注意,如果您所做的只是索引一个属性,那么索引器是多余的,索引也可以直接检索该属性。

  2. 注册一个“catch all”索引器:

    from zope.interface import Interface
    @indexer(Interface)
    def catchall_ignore(ob, **kw):
        # Raising AttributeError means: do not index anything
        raise AttributeError
    

    代替直接属性访问,现在这个索引器方法将用于照片,导致索引器不为building.

于 2012-06-28T14:36:40.990 回答
1

这就是收购的运作方式。

这里如何解决这个问题:

http://plone.293351.n2.nabble.com/how-to-prevent-portal-catalog-from-indexing-acquisition-values-td2650735.html

“使用执行 aq_explicit 检查的自定义索引器。”

于 2012-06-28T14:14:10.263 回答