我的自定义灵巧类型如下所示:
class IMyType(form.Schema):
title = schema.TextLine(
title=_(u"Title"),
)
address = schema.TextLine(
title=_(u"Address"),
required=False,
)
class MyType(dexterity.Container):
grok.implements(IMyType)
我希望实时搜索结果如下所示,如果存在,则列出其标题和地址值的前3个字符:
Item One
Address[:3]
Item Two
Address[:3]
默认情况下,匹配的每个项目都会显示其标题和说明。因此,一种解决方案是从地址字段计算描述字段。但我不知道怎么做。有任何提示或更好的建议吗?
答案 0 :(得分:1)
引用http://somedoma.in:8080/somePloneSiteId/portal_catalog/manage_catalogSchema:
“重要的是要了解当搜索目录时,它返回结果对象的列表,而不是编目对象本身,所以如果你想在搜索结果中使用对象属性的值,那么属性必须在此列表中“
因此,在将您的fieldname添加到元数据索引之后,您可以自定义livesearch_reply,以实现您想要的,在第52行(Products.CMFPlone-4.3)之后插入“display_description”,其中:
if result.portal_type == 'yourtype':
display_description = safe_unicode(result.address)
答案 1 :(得分:0)
您可以使用plone.indexer覆盖特定类型的Description索引。 这样,目录就有了正确的信息,您无需自定义搜索结果。
from plone.indexer import indexer
@indexer(IMyType)
def custom_description(obj, **kw):
return obj.Description[:3]
注册
<adapter name="description" factory=".indexers.custom_description" />
的plone.indexer文档