2

我正在为 Sitecore 制作第 3 方 Javascript 工具,该工具需要根据当前编辑页面的模板修改其行为。

到目前为止,我一直在使用这个脚本来获取模板的名称:

jQuery(".scEditorSectionPanelCell a[onclick*='shell:edittemplate']")[0].innerHTML.match(/\/?([^/]+?)$/i)[1];

一点解释:在编辑页面时,有一个名为“快速信息”的段落(如果翻译不正确,我们深表歉意 - 不适用于英文版 Sitecore)。本段内是编辑当前模板的直接链接 - 这是我使用 jQuery 获取的链接:

<td>
  <a href="#" onclick="javascript:scForm.postRequest('','','','shell:edittemplate');return false">
    /sitecore/templates/Imported/[NAME-OF-TEMPLATE]
  </a> - 
  <input class="scEditorHeaderQuickInfoInputID" readonly="readonly" onclick="javascript:this.select();return false"
    value="{[ID-OF-TEMPLATE]}">
</td>

从中我得到带有正则表达式的模板名称。如果我愿意,我还可以从兄弟<input>元素中获取模板 ID。

问题是,并非所有用户都可以看到“快速信息”段落。

关于如何在“快速信息”不可见时获取模板名称或 ID 的任何建议?我无法访问底层的 ASP.NET 代码,因此解决方案需要严格使用 Javascript。

4

1 回答 1

1

Sitecore 附带了一个 Web 服务,您可以使用它来获取此信息。但是,当用户无权访问快速信息时,我没有设置安全性进行测试。

您需要下载链接的soapclient.js文件并添加对它的引用。这是对浮动的soapclient.js 的改编。我意识到它不能满足您的需求,因此我对其进行了修改以适合您。

<script type="text/javascript" src="/resources/javascript/soapclient.js"></script>

然后你需要添加这个js来使用soapclient。

    var url = document.location.href.replace(document.location.pathname, "/sitecore/shell/WebService/Service.asmx");
    var id = "1CB4A1EF-F4C9-4596-9364-430885DDDD00"; //path of item.
    var deep = false //Get All fields
    var dbName = "web" //Which DB you'd like to get the fields from. 

    var credentials = new Object();
    credentials.UserName = "Sitecore\\Admin";
    credentials.Password = "b";
    credentials.CustomData = "";
    var pl = new SOAPClientParameters();
    pl.add("id", id);
    pl.add("deep", deep);
    pl.add("databaseName", dbName);
    pl.add("credentials", credentials);

    SOAPClient.invoke(url, "GetXML", pl, true, GetItemFields_callBack);

    function GetItemFields_callBack(response) {
        console.log(response.sitecore.data.data.item.tid);
    }

如果您只提供当前登录用户的 ID,则不需要密码。如果您输入管理员密码,您将能够访问所有内容。

于 2012-05-14T19:17:10.860 回答