1

Plone.orgの指示に従って、コンテンツタイプにFieldIndexを追加します。

ZMIでは、でインデックス付けされたアイテムを見ることができます/mysite/portal_catalog/Indexes/Building。私のコンテンツタイプ(IMyType1つのフィールドで提供)はフォルダっぽく、ファイルにallowed_content_typesとしてbuilding写真(フィールドIPhotoなしで提供)が含まれています。buildingprofiles/default/types/MyType.xml

MyTypeの構築フィールドに対してのみインデックスを作成したい。ただし、写真タイプのアイテムは、親からの値でインデックス付けされているようです。うざい。コード@indexer(IMyType)は、IMyTypeとそれに含まれるタイプのインデックス作成を意味しますか?IMyTypeのみのインデックスを作成するにはどうすればよいですか?

4

2 に答える 2

2

インデクサーが行うことは、インデックス付けされているオブジェクトから直接属性を取得することです。特別なラッパーとしてのPloneで、登録されたインデクサー(@indexerデコレーターで作成されたもの)が存在する場合はそれを使用します。

ただし、インデックスが作成されbuilding、それがオブジェクトの直接の属性でもあるIMyType場合、含まれているオブジェクトはすべて、取得を通じてその属性を持ちます。のインデクサを登録しIMyTypeても、これを防ぐことはできません。

これを回避する方法はいくつかあります。

  1. インデクサーには、属性名と一致しない別の名前を使用してください。ただし、属性にインデックスを付けるだけの場合、インデクサーは冗長ですが、インデックスは属性を直接取得することもできます。

  2. 「キャッチオール」インデクサーを登録します。

    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 に答える