我需要从任何Tridion页面的Component Presentation选项卡中获取组件和组件模板tcm ID。
情景:
我想找到确切的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
});
};
所以在这里我将获得所选组件和模板“compId”&的tcm id。 “templateId”,即插入。现在我的问题是:如何检查组件演示文稿选项卡上是否已存在此组件和模板?
如果我能以某种方式获得页面上已存在的所有组件和模板的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 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());
}
答案 0 :(得分:3)
获得“页面”对话框的“组件演示”选项卡后,您可以获得此类组件演示文稿列表
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
类)。
答案 1 :(得分:2)
我在这里回答了这个问题:restrict user to insert same component and template
似乎问题已经改变,因为答案现在似乎并不相关,但我相信这会帮助你弄清楚你需要做什么。