Plone 基于特定字段计算描述

Plone 基于特定字段计算描述,plone,dexterity,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.implement

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

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]

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

您可以使用plone.indexer覆盖特定类型的描述索引。 这样,目录就有了正确的信息,您不必自定义搜索结果

从plone.indexer导入索引器
@索引器(IMyType)
def自定义_说明(obj,**kw):
返回对象描述[:3]
登记册

引用:

重要的是要了解,当搜索目录时,它返回的是结果对象列表,而不是目录对象本身,因此如果要在搜索结果中使用对象属性的值,该属性必须在此列表中

因此,在将字段名添加到元数据索引后,您可以自定义livesearch\u reply,为了实现您想要的,请在第52行(Products.CMFPlone-4.3)后面插入设置了“display\u description”的内容,如下所示:

if result.portal_type == 'yourtype':
    display_description = safe_unicode(result.address)

嗨,玛尔,其中一个答案可以帮助你/你需要更多信息吗?这些答案非常感谢,非常有帮助。在我的情况下,我可能需要他们两个。我会找时间试用的。我想这取决于你的用例。如果您希望地址的总体/全局行为与描述类似:请选择mat的建议。尽管这是假设,但您根本不需要contype的描述,然后您仍然可以使用desc字段作为地址输入。如果您只需要在livesearch结果中使用它,请使用定制livesearch_reply.Nice。你的评论应该得到最好的答案。:D对这两个答案进行外交上的“划分”是多么甜蜜,很高兴你现在拥有了你需要的所有信息!