6

在 Alfresco Share 中,当您单击工具栏中的“存储库”图标时,您将被带到:

/共享/页面/存储库

我想更改此链接以将用户带到他们的主文件夹,例如:

/share/page/repository#filter=path|/User%2520Homes/g/gi/gillespie/patrick.j.gillespie

我认为这将是一个简单的更改,但是,我正在努力弄清楚如何更改链接。有谁知道我编辑什么来更改该链接?

更新:所以我可以通过 share-config-custom.xml 文件更新链接,更改这一行:

<item type="link" id="repository">/repository</item>

但我不确定如何在其中获取文件夹路径信息。有没有人有任何想法?

4

2 回答 2

5

这非常困难,所以我想我会发布我所做的,以防其他人有同样的问题。

如果您不使用散列主文件夹,则可以通过简单地更新 share-config.xml 或 share-config-custom.xml 来提供此功能,如下所示:

<item type="link" id="repository">/repository#filter=path|/User%2520Homes/{userid}</item>

但是,如果您使用的是散列主文件夹,事情就会变得有点棘手。您无需修改​​任何 XML 文件,而是创建一个 Web 脚本来获取用户的主文件夹路径,然后修改共享模板文件以替换存储库的链接。下面是一个示例 Web 脚本以及执行此操作所需的对模板文件的修改。

hfp.get.desc.xml

<webscript>
    <shortname>Home Folder Path</shortname>
    <description>Description here.</description>
    <format default="json">argument</format>
    <url>/demo/get-home-folder-path</url>
    <authentication>user</authentication>
</webscript>

hfp.get.js

此脚本向上遍历节点树并将文件夹的路径放在一起。

var myPerson = person;//used people.getPerson("patrick.j.gillespie") for testing
var currentNode = myPerson.properties.homeFolder;
var myDir = currentNode.properties["{http://www.alfresco.org/model/content/1.0}name"];
var count = 0;

while (count < 100) { // prevent an infinite loop
    currentNode = currentNode.parent;
    if (currentNode === undefined || currentNode === null) {break;}
    if (currentNode.properties === undefined) {break;}
    myDir = currentNode.properties["{http://www.alfresco.org/model/content/1.0}name"] + "/" + myDir;
    count++;
}
if (count === 100) { //something went wrong
    myDir = "";
}

model.homeFolder = myDir;

hfp.get.json.ftl

{
   "homeFolder": "${homeFolder}"
}

最后,您需要修改位于“share/WEB-INF/classes/alfresco/templates/org/alfresco/include”中的“alfresco-template.ftl”文件。在文件底部附近,添加以下代码。它将调用上述 Web 脚本来获取主文件夹路径,然后使用主文件夹链接更新存储库链接。

<script type="text/javascript">
    var callback = {
        success: function(res) {
            var data = YAHOO.lang.JSON.parse(res.responseText);
            var homeFolder = "";
            var hfIndex = data.homeFolder.indexOf("/User Homes/");
            if (hfIndex !== -1) {
                homeFolder = data.homeFolder.substr(hfIndex+12);
            }

            var repoLinks = $("a[title='Repository']");
            for (var ii = 0; ii < repoLinks.length; ii++) {
                repoLinks.get(ii).href = "/share/page/repository#filter=path|/User%2520Homes/" + homeFolder;
            }
        }
    };
    var sUrl = Alfresco.constants.PROXY_URI + "demo/get-home-folder-path";
    var postData = "";
    var getData = "";
    var request = YAHOO.util.Connect.asyncRequest('GET', sUrl+getData, callback, postData);
</script>

可能有更好的方法,但我找不到。稍后我可能会对其进行改进,这应该主要用作起点,但我想我会发布它以防万一有人遇到类似问题。

于 2012-04-05T20:58:24.480 回答
1

虽然不是很优雅,但我想您可以在链接上使用 Javascript onclick 处理程序附加参数或锚点。不太确定哪个 webscript 呈现工具栏,但那个可能是放置自定义的好地方。

于 2012-04-05T05:21:47.180 回答