首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JavaScript获取组件和组件模板的tcm?

如何使用JavaScript获取组件和组件模板的tcm?
EN

Stack Overflow用户
提问于 2012-07-20 12:52:45
回答 2查看 1.3K关注 0票数 2

我需要从任何Tridion的组件表示选项卡中获取组件和组件模板tcm。

设想情况:

  • 在Tridion的现存页面上。
  • 转到“组件演示”选项卡。
  • 当我单击“插入”按钮时,我希望迭代组件和组件模板tcm,并将其显示在JavaScript警报框中。

我试图找到精确的javascript文件/函数来完成这个任务,但找不到确切的文件/函数。

我正在使用SDL Tridion 2011 SP1。

如有任何帮助/建议,将不胜感激。

编辑

我有这个脚本,当我们单击“插入组件演示文稿”窗口中的“插入”按钮时,会触发该脚本。

代码语言:javascript
复制
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
  });
};

因此,在这里,我将得到所选组件的中药id和模板"compId“& "templateId",这是要插入的。现在我的问题是:如何检查组件和模板是否已经出现在组件表示选项卡上?

如果我能以某种方式获得页面上已经存在的所有组件和模板的id (从我的“插入”按钮),那么我可以比较它们。但是我没有得到任何函数来给我这些id。我被卡住了。

编辑

我试图使用这些代码进入页面,但是我无法获得正确的函数,该函数是在单击Insert时触发的,或者它将返回列出的组件和模板id列表。

代码语言:javascript
复制
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下列出的所有CP Id。感谢@Frank van Puffelen

代码语言:javascript
复制
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());     
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-21 12:00:58

一旦有了“页面”对话框的“组件演示”选项卡,就可以获得如下组件演示文稿的列表

代码语言:javascript
复制
comPresList = compPresTab.getListComponentPresentations();

您可以检查XML格式的列表,如下所示:

代码语言:javascript
复制
comPresList.getXml()

或者,当您在代码片段中尝试时,您可以使用:

代码语言:javascript
复制
comPresList.getItems()

这将给出Tridion.ContentManager.ComponentPresentation对象的列表,每个对象都可以调用getComponentIdgetComponentTemplateId

代码语言:javascript
复制
comPresList.getItems()[0].getComponentId()
comPresList.getItems()[0].getComponentTemplateId()

获取这些信息的方法是:将the snippet that John Winter provided you earlier粘贴到Chrome JavaScript控制台,然后在源代码树(磁盘上)上搜索关键短语,例如"insert" (查找insert事件的所有处理程序)和ComponentPresentation = (查找ComponentPresentation类)。

票数 3
EN

Stack Overflow用户

发布于 2012-07-20 12:56:14

我在这里回答说:restrict user to insert same component and template

问题似乎已经改变了,所以现在的答案似乎与此无关,但我相信这会帮助你找到你需要做的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11579780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档