公认的解决方案可能有点模糊,所以这里有一些澄清:
1) 不要编辑您的全局通用设置。
除非您正在做一些非常奇怪的事情,否则您会将您的网站设置为一系列 plone 扩展,并具有如下文件夹结构:
app.plugin/
app.plugin/app/
app.plugin/app/configure.zcml
app.plugin/app/profiles/
app.plugin/app/profiles/default
app.plugin/app/profiles/default/types
app.plugin/app/profiles/default/types/Folder.xml
app.plugin/app/profiles/default/types/app.mydexteritytype.xml
app.plugin/app/profiles/default/types.xml
app.plugin/app/profiles/default/portlets.xml
app.plugin/app/profiles/default/catalog.xml <---- ADD THIS
2)您不必在 catalog.xml 中有一个 xml 块(根据接受的解决方案),您可以从前端 ZMI 创建索引。但是,如果您这样做,下次安装插件时它会被吹走。所以你可能确实想要。
3) 安装catalog.xml 后,浏览ZMI 界面到portal_catalog 并检查'indexes' 选项卡下的索引是否存在。如果没有,你就搞砸了。
4) 要构建索引,您需要转到“高级”选项卡并选择重建。
5) 索引器贪婪地消耗异常并且不会引发它们(对于 AttributeError 尤其重要;您可能不会索引一些您想要索引的值),因此如果您想确保您的索引器实际运行,请尝试添加日志或打印其中声明:
@indexer(IMyDexterityType)
def dummy_indexer(obj, **kw):
try:
print('indexed: %r' % obj)
return obj.title
except Exception as e:
print('index fail: %r' % e)
return ''
如果不出意外,您应该会看到一些输出,例如:
2013-08-12 16:42:28 INFO GenericSetup.archetypetool Archetype tool imported.
2013-08-12 16:42:28 INFO GenericSetup.resourceregistry Stylesheet registry imported.
2013-08-12 16:42:28 INFO GenericSetup.resourceregistry Javascript registry imported.
indexed: <MyDexterityType at /Plone/test/cat-document-0>
indexed: <MyDexterityType at /Plone/test/hello>
6) grok.global_adapter() 如某些文档中所述(http://developer.plone.org/reference_manuals/external/plone.app.dexterity/advanced/catalog-indexing-strategies.html?highlight=custom%20indexing #creating-custom-indexers)是关于注册虚拟属性,并不能减轻设置您的 catalog.xml 的需要。
最后,有人在 github 上放了一个工作示例,这非常有用:
https://github.com/aclark4life/event_days_indexer