在Alfresco AIkau分面搜索页面中更改结果URL

时间:2016-04-04 11:32:56

标签: dojo alfresco alfresco-share aikau

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

我想要做的是用下载网址替换文档详情页面网址。

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

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

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

我了解搜索结果网址是以这种方式呈现的: AlfSearchResult module =>使用SearchResultPropertyLink module => mixins _SearchResultLinkMixin renderer =>带来" generateSearchLinkPayload" function =>根据结果​​类型呈现URL

我想覆盖这个" generateSearchLinkPayload"功能,但我无法弄清楚这是最好的方法。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

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

要执行此操作,您需要覆盖createDisplayNameRenderer窗口小部件中AlfSearchResult的{​​{1}}功能。这样您就可以创建CustomAlfSearchResult

的扩展名

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

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

您应该扩展contentUrl函数,以便对于文档或文件夹类型,有效内容包含属性generateSearchLinkPayload,该属性是单个数组,其中对象是您要下载的搜索结果对象。< / p>

我建议您先调用nodes获取默认有效负载,然后只更新文档和文件夹。

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

答案 1 :(得分:2)

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

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

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

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