【问题标题】:Change results URL in Alfresco AIkau faceted search page在 Alfresco AIkau 多面搜索页面中更改结果 URL
【发布时间】:2016-04-04 11:32:55
【问题描述】:

我在 Alfresco 上自定义 Aikau 分面搜索页面时遇到了一些困难,这可能更多是因为我对 dojo/AMD 缺乏了解。

我要做的是用下载 URL 替换文档详细信息页面 URL。

我扩展了搜索结果小部件以包含我自己的自定义模块:

var searchResultWidget = widgetUtils.findObject(model.jsonModel, "id", "FCTSRCH_SEARCH_RESULT");

if(searchResultWidget) {
    searchResultWidget.name = "mynamespace/search/CustomAlfSearchResult";
}

我了解搜索结果 URL 是这样呈现的: AlfSearchResult 模块 => 使用 SearchResultPropertyLink 模块 => mixins _SearchResultLinkMixin 渲染器 => 带来“generateSearchLinkPayload”功能 => 根据结果类型渲染 URL

我想重写这个“generateSearchLinkPayload”函数,但我不知道最好的方法是什么。

提前感谢您的帮助!

【问题讨论】:

    标签: dojo alfresco alfresco-share aikau


    【解决方案1】:

    此答案假定您能够使用最新版本的 Aikau(在撰写本文时为 1.0.61)。旧版本可能需要稍微不同的覆盖...

    为了做到这一点,您需要在 CustomAlfSearchResult 小部件中覆盖 AlfSearchResultcreateDisplayNameRenderer 函数。这将允许您创建alfresco/search/SearchResultPropertyLink 的扩展。

    如果您想利用 alfresco/services/DocumentService 提供的下载功能来下载文档和文件夹(作为 zip),那么您需要同时更改 publishTopicpublishPayload SearchResultPropertyLink。

    您应该扩展getPublishTopicgenerateSearchLinkPayload 函数。对于getPublishTopic 函数,您需要将返回值更改为“ALF_SMART_DOWNLOAD”(alfresco/core/topics 模块中有可用于这些字符串的常量)。该主题可用于告诉DocumentService 负责确定节点是文件夹还是文档,并将针对完整节点元数据发出 XHR 请求(以获取未包含的 contentUrl 属性在 Search API 返回的数据中。

    您应该扩展generateSearchLinkPayload 函数,以便对于文档或文件夹类型,有效负载包含属性nodes,这是一个单一数组,其中对象是您希望下载的搜索结果对象。

    我建议您首先调用this.inherited 以获取默认有效负载,并且只为文档和文件夹更新它。

    希望这一切都有意义 - 如果没有,请添加评论,我会尽力提供进一步的帮助!

    【讨论】:

    • 感谢您的帮助,戴夫!我应该指定我使用与 Aikau 1.0.25 一起打包的 Alfresco 5.1.2.5。不幸的是,createDisplayNameRenderer 函数在这个版本中不可用......在旧版本中是否有另一种“干净”的方式来扩展 SearchResultPropertyLink ?
    • 好的...我将在今天晚些时候再看一下,看看有哪些选项。智能下载肯定不可用,正如您所说,AlfSearchResult 不会被如此整齐地分解。可以将更高版本的 Aikau 引入(显然这里存在一小部分风险,因为它们不会通过完整的集成 QA 流程)。但后来的服务包(用于 5.0 和 5.1)通常采用最新版本的 Aikau。
    【解决方案2】:

    这是 1.0.25.2 的答案 - 不幸的是,它并不是那么简单......

    您仍然需要扩展alfresco/search/AlfSearchResult 小部件,但是这次您需要扩展postCreate 函数(记得调用this.inherited(arguments))。无法阻止创建原始的 alfresco/search/SearchResultPropertyLink 小部件...因此有必要找到它并销毁它。

    小部件未分配给变量,因此需要使用dijit/registry 找到它。使用dijit/registry 中的byNode 函数找到分配给this.nameNode 的小部件,然后对其调用destroy(确保传递参数true 以保留DOM)。但是,您需要清空 DOM 节点才能重新开始...

    现在您需要将您的扩展程序添加到alfresco/search/SearchResultPropertyLink。不幸的是,由于智能下载功能不可用,您需要做更多的工作。此处的不同之处在于,您需要发出 XHR 请求来检索完整节点元数据,以便获取 contentURL。可以向DocumentService 发布请求(通过“ALF_RETRIEVE_SINGLE_DOCUMENT_REQUEST”主题)。但是,您需要注意,拥有 XHR 步骤将不允许您按原样继续下载。相反,您需要使用 iframe 下载解决方案,我建议您查看我们最近为解决此问题而对 pull request 所做的更改,并将它们反向移植到您自己的解决方案中。

    【讨论】:

    • 我意识到答案只是部分正确 - 所以我进行了编辑以描述如何实现自定义 SearchResultPropertyLink - 以前在原始答案中缺少这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    相关资源
    最近更新 更多