2

現在編集中のページのテンプレートに応じて動作を変更する必要がある Sitecore 用のサード パーティ Javascript ツールを作成しています。

これまでのところ、このスクリプトを使用してテンプレートの名前を取得してきました。

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

簡単な説明: ページを編集するときに、「Quick info」という段落があります (これが間違って翻訳されている場合はお詫びします - 英語版の 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 を取得することもできます。

問題は、「Quick info」段落がすべてのユーザーに表示されないことです。

「クイック情報」が表示されていないときにテンプレート名または ID を取得する方法について何か提案はありますか? 基盤となる ASP.NET コードにアクセスできないため、ソリューションは厳密に Javascript である必要があります。

4

1 に答える 1

1

Sitecore には、この情報を取得するために使用できる Web サービスが付属しています。ただし、ユーザーがクイック情報にアクセスできない場合にテストするためのセキュリティをセットアップしませんでした。

リンクされたsoapclient.jsファイルをダウンロードして、参照を追加する必要があります。これは、あちこちに出回っている soapclient.js を適応させたものです。ニーズに合っていないことがわかったので、機能するように修正しました。

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

次に、soapclient を使用するためにこの js を追加する必要があります。

    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 に答える