【问题标题】:How do I get Sitecore 6 template name or ID in Javascript?如何在 Javascript 中获取 Sitecore 6 模板名称或 ID?
【发布时间】:2012-05-08 15:02:57
【问题描述】:

我正在为 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>

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

问题是,“快速信息”段落并非对所有用户可见。

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

【问题讨论】:

  • 所以这是在内容编辑器的编辑表单中?你是如何注入 Javascript 的?也许是自定义字段或 IFRAME 字段?
  • 短版:通过 web.config 中的 &lt;clienscripts&gt; 部分。长版:stackoverflow.com/questions/9061967/…

标签: javascript templates sitecore sitecore6


【解决方案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,则不需要密码。如果您输入管理员密码,您将能够访问所有内容。

【讨论】:

    猜你喜欢
    • 2017-03-22
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    相关资源
    最近更新 更多