我需要从任何Tridion的组件表示选项卡中获取组件和组件模板tcm。
设想情况:
我试图找到精确的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
});
};因此,在这里,我将得到所选组件的中药id和模板"compId“& "templateId",这是要插入的。现在我的问题是:如何检查组件和模板是否已经出现在组件表示选项卡上?
如果我能以某种方式获得页面上已经存在的所有组件和模板的id (从我的“插入”按钮),那么我可以比较它们。但是我没有得到任何函数来给我这些id。我被卡住了。
编辑
我试图使用这些代码进入页面,但是我无法获得正确的函数,该函数是在单击Insert时触发的,或者它将返回列出的组件和模板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下列出的所有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());
}发布于 2012-07-21 12:00:58
一旦有了“页面”对话框的“组件演示”选项卡,就可以获得如下组件演示文稿的列表
comPresList = compPresTab.getListComponentPresentations();您可以检查XML格式的列表,如下所示:
comPresList.getXml()或者,当您在代码片段中尝试时,您可以使用:
comPresList.getItems()这将给出Tridion.ContentManager.ComponentPresentation对象的列表,每个对象都可以调用getComponentId和getComponentTemplateId。
comPresList.getItems()[0].getComponentId()
comPresList.getItems()[0].getComponentTemplateId()获取这些信息的方法是:将the snippet that John Winter provided you earlier粘贴到Chrome JavaScript控制台,然后在源代码树(磁盘上)上搜索关键短语,例如"insert" (查找insert事件的所有处理程序)和ComponentPresentation = (查找ComponentPresentation类)。
发布于 2012-07-20 12:56:14
我在这里回答说:restrict user to insert same component and template
问题似乎已经改变了,所以现在的答案似乎与此无关,但我相信这会帮助你找到你需要做的事情。
https://stackoverflow.com/questions/11579780
复制相似问题