1

我在 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”函数,但我不知道什么是最好的方法。

在此先感谢您的帮助 !

4

2 回答 2

4

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

为此,您将需要覆盖小部件中的createDisplayNameRenderer功能。这将允许您创建.AlfSearchResultCustomAlfSearchResultalfresco/search/SearchResultPropertyLink

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

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

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

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

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

于 2016-04-04T19:47:07.100 回答
3

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

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

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

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

于 2016-04-05T12:13:56.423 回答