将计算的元数据添加到dexterity对象的目录中(plone 4)

时间:2011-12-06 00:07:12

标签: plone zope

我想用计算字符串创建目录元数据。因此,在Aspeli's bookthe developer manual之后,我开始创建索引器:

# indexer.py
@grok.adapter(Entry, name='bind_representation')
@indexer(Entry)
def bindIndexer(context):
    print str(IBindRepresentable(context))
    return str(IBindRepresentable(context))

并使用genericSetup注册索引:

<!-- profiles/default/catalog.xml -->
<?xml version="1.0"?>
<object name="portal_catalog" meta_type="Plone Catalog Tool">

  <index name="bind_representation" meta_type="ZCTextIndex">
                  <!-- I tried with meta_type="FieldIndex" too -->
    <indexed_attr value="bind_representation"/>

    <!-- copied from other text metadata -->
    <extra name="index_type" value="Okapi BM25 Rank"/>
    <extra name="lexicon_id" value="plaintext_lexicon"/>
  </index>
</object>

问题是:(1)只注册索引,而不是元数据,(2)在重新索引所有zodb之后,bind_representation仍然找不到任何索引条目,即使它们是。

引用的示例仅处理预先存在的索引,因此我不确定catalog.xml的内容。似乎根本没有调用 bindIndexer ,因为它的print语句永远不会被执行。我也将 bindIndexer 复制到了entry.py,以确保它没有被忽略,但仍然没有被忽略。

我错过了什么?

感谢。

1 个答案:

答案 0 :(得分:1)

1-为了添加新元数据,您必须使用以下语法:

<?xml version="1.0"?>
<object name="portal_catalog" meta_type="Plone Catalog Tool">
    ...
     <column value="bind_representation"/>
</object>

2a-您正在调整您的内容类,您应该调整您的内容界面(最有可能是IEntry)。

2b-您正在使用ZCTextIndex:该索引不会显示所有条目(即使在前一点之后),因为它基于词典。你可能应该使用它(除非你有特定的界限):

<index name="bind_representation" meta_type="FieldIndex">
    <indexed_attr value="bind_representation"/>
</index>

更多信息: