基于特定场的计算描述

时间:2013-12-02 07:30:44

标签: plone dexterity

我的自定义灵巧类型如下所示:

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]

默认情况下,匹配的每个项目都会显示其标题和说明。因此,一种解决方案是从地址字段计算描述字段。但我不知道怎么做。有任何提示或更好的建议吗?

2 个答案:

答案 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" />

检查有关pypi https://pypi.python.org/pypi/plone.indexer

的plone.indexer文档