使用collective.dexteritytextindexer扩展SearchableText

时间:2014-06-09 10:30:10

标签: plone dexterity

我正在尝试为我的内容类型扩展SearchableText索引。 我已成功通过将它们标记为索引器来包含多个字段:模型文件中的searchable =“true”。 但是我无法从我的类型py中扩展SearchableText,如下所示:

class IMyBehavior(form.Schema):

    dexteritytextindexer.searchable('description')
    description = schema.Text(title=u'Precis')

alsoProvides(IMyBehavior, IFormFieldProvider)


class MySearchableTextExtender(object):
    adapts(IMyBehavior)
    implements(dexteritytextindexer.IDynamicTextIndexExtender)

    def __init__(self, context):
        self.context = context

    def __call__(self):
        """Extend the searchable text with a custom string"""
        return 'some more searchable words'

我必须承认,我真的不知道第一堂课是如何运作的。我是否必须在此类中设置可搜索字段才能在第二个字段中扩展SearchableText? 如果我从模型中删除所有索引器:searchable =“true”,那么SearchableText就是空的。

第一个类是否尝试同时注册模式?如果是这样,如果它只是扩展SearchableText会是什么样子?

1 个答案:

答案 0 :(得分:3)

collective.dexteritytextindexer提供了两个重要功能:

  1. 正如您已经实现的那样,dexteritytextindexer使您能够将values放入Plone的SearchableText索引中。通过向表单添加dexteritytextindexer.searchable(FIELDNAME),该字段的值将显示在SearchableText中。在Archetypes中,您可以通过向字段定义添加searchable=True来获得相同的功能。

  2. collective.dexteritytextindexer还可以通过注册IDynamicTextIndexExtender适配器来手动扩展 searchableText。它使用适配器中的值扩展 part 1的值。

  3. 我猜你的问题是,你错过了注册适配器:https://github.com/collective/collective.dexteritytextindexer#extending-indexed-data

    示例:

    <adapter
        factory=".yourbehavior.MySearchableTextExtender"
        provides="collective.dexteritytextindexer.IDynamicTextIndexExtender"
        name="IMyBehavior"
        />
    

    这是一个有效的例子: 此代码使用其子项的searchableText扩展容器的SearchableText

    IDynamicTextIndexExtender适配器: https://github.com/4teamwork/ftw.simplelayout/blob/a7d631de3984b8c1747506b9411045fdf83bc908/ftw/simplelayout/indexer.py

    使用zcml注册适配器: https://github.com/4teamwork/ftw.simplelayout/blob/a7d631de3984b8c1747506b9411045fdf83bc908/ftw/simplelayout/behaviors.zcml#L21

    最重要的部分 - 测试实施: https://github.com/4teamwork/ftw.simplelayout/blob/a7d631de3984b8c1747506b9411045fdf83bc908/ftw/simplelayout/tests/test_indexer.py#L31