2

Tridion ページのコンポーネント プレゼンテーション タブから、コンポーネントとコンポーネント テンプレートの tcm ID を取得する必要があります。

シナリオ:

  • Tridion の既存のページ。
  • 「コンポーネント プレゼンテーション」タブに移動します。
  • 「挿入」ボタンをクリックすると、コンポーネントとコンポーネント テンプレートの tcm id を反復処理し、それを JavaScript アラート ボックスに表示します。

これを達成するための正確な JavaScript ファイル/関数を見つけようとしていますが、正確なものが見つかりませんでした。

SDL Tridion 2011 SP1 を使用しています。

どんな助け/提案も大歓迎です。

編集

「コンポーネントプレゼンテーションの挿入」ウィンドウで「挿入」ボタンをクリックすると起動するこのスクリプトがあります。

Tridion.Cme.Views.InsertCpDialog.prototype.onInsertClick = 
                    function InsertCpDialog$onInsertClick()
{
  var p = this.properties;
  var c = p.controls;
  var templateId = c.templateSelect.getValue();
  var components = c.list.getSelection().getItems();

  p.componentPresentationsAdded += components.length;

  var compId = components[components.length - 1];
  var component = $models.getItem(compId);
  if (component)
  {
    var userSettings = Tridion.UI.UserSettings.getInstance();
    if (userSettings && userSettings.isLoaded())
    {
      Tridion.UI.UserSettings.setLastSelectedLocation(
          component.getPublicationId(), $const.ItemType.COMPONENT, p.contextUri);
    }
  }

  this.fireEvent("insert", {
    components: components,
    template: templateId
  });
};

ここでは、選択したコンポーネントの tcm id と、挿入するテンプレート「compId」および「templateId」を取得します。私の質問は次のとおりです。このコンポーネントとテンプレートがコンポーネント プレゼンテーション タブに既に存在するかどうかを確認するにはどうすればよいですか?

どういうわけか、ページに既に存在するすべてのコンポーネントとテンプレートの id を (「挿入」ボタンから) 取得できれば、それらを比較できます。しかし、私はそれらのIDを私に与える関数を取得していません。ここで行き詰まりました。

編集

これらのコードを使用してページ内に移動しようとしていますが、挿入をクリックすると起動する正しい関数を取得できません。または、そこにリストされているコンポーネントとテンプレート ID のリストを返します。

Extensions.Test.prototype.isEnabled = function Test$isEnabled(selection) {
  try
  {
    console.log($controls);
    var masterTabControl = $controls.getControl($("#MasterTabControl"), 
                                            "Tridion.Controls.TabControl");

    console.log(masterTabControl);
    alert("Mastercontrol - ComponentpresentationsTab");
    console.log(masterTabControl.getPage("ComponentPresentationsTab"));
    console.log("list of component presentations");
    console.log(masterTabControl.getPage("ComponentPresentationsTab").
                             getListComponentPresentations().getItems());
    console.log("list of get xml");
    console.log(masterTabControl.getPage ("ComponentPresentationsTab").
                             getListComponentPresentations().getItems().getXml);
  }
  (catch exc)
  {
  }
  return true;
}

編集 このコードを使用して、CP TAB の下にリストされているすべての CP Id を取得しました。@Frank van Puffelenに感謝

var p = this.properties;
var tgp = this.properties;
var c = p.controls;

var pageId = selection.getItem(0);
var masterTabControl = $controls.getControl($("#MasterTabControl"), 
                                            "Tridion.Controls.TabControl");
var compPresTab = masterTabControl.getPage("ComponentPresentationsTab");
var comPresList = p.compPresTab.getListComponentPresentations(); 
for (var i = 0; i <= myStringArray.length; i++) 
{     
  console.log(comPresList.getItems()[i].getComponentId());
  console.log(comPresList.getItems()[i].getComponentTemplateId());     
}
4

2 に答える 2

3

[ページ]ダイアログの[コンポーネントプレゼンテーション]タブが表示されると、次のようなコンポーネントプレゼンテーションのリストを取得できます。

comPresList = compPresTab.getListComponentPresentations();

次のように、XML形式でリストを検査できます。

comPresList.getXml()

または、コードスニペットで試しているように見えるので、次を使用してアイテム自体を取得できます。

comPresList.getItems()

これにより、オブジェクトのリストが表示され、それぞれを呼び出してTridion.ContentManager.ComponentPresentation呼び出すことができます。getComponentIdgetComponentTemplateId

comPresList.getItems()[0].getComponentId()
comPresList.getItems()[0].getComponentTemplateId()

John Winterが以前に提供したスニペットを取得し、Chrome JavaScriptコンソールに貼り付けてから、ソースツリー(ディスク上)で(イベント"insert"のすべてのハンドラーを見つけるために)などのキーフレーズをテキスト検索して、この情報を取得しました。 insert)および(クラスComponentPresentation =を見つけるため)。ComponentPresentation

于 2012-07-21T12:00:58.573 に答える
2

私はここでこれに答えました:同じコンポーネントとテンプレートを挿入するようにユーザーを制限する

質問が変更されたようですので、今の答えは関係ないようですが、これはあなたが何をする必要があるかを理解するのに役立つと確信しています.

于 2012-07-20T12:56:14.517 に答える