2012-05-08 49 views
2

我正在为Sitecore制作第三方Javascript工具,需要根据当前编辑页面的模板修改它的行为。如何在Javascript中获取Sitecore 6模板名称或ID?

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

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。

+0

所以这是在内容编辑器的编辑窗体?你如何注入Javascript?自定义字段或IFRAME字段也许? – techphoria414

+0

简短版本:通过web.config中的部分。长版本:http://stackoverflow.com/questions/9061967/how-to-insert-custom-javascripts-in-sitecore-backend – Woodgnome

回答

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,则不需要密码。如果您使用管理员密码进行编码,您将可以访问所有内容。