我在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"功能,但我无法弄清楚这是最好的方法。
提前感谢您的帮助!
答案 0 :(得分:3)
这个答案假设您能够使用最新版本的Aikau(在撰写本文时为1.0.61)。旧版本可能需要略微不同的覆盖...
要执行此操作,您需要覆盖createDisplayNameRenderer
窗口小部件中AlfSearchResult
的{{1}}功能。这样您就可以创建CustomAlfSearchResult
。
如果您想利用alfresco/search/SearchResultPropertyLink
提供的下载功能来下载文档和文件夹(作为zip),那么您将要更改alfresco/services/DocumentService
和SearchResultPropertyLink的publishTopic
。
您应该扩展publishPayload
和getPublishTopic
功能。对于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中的更改,并将它们移植到您自己的解决方案中。