gpt4 book ai didi

tridion - 如何使用 JavaScript 获取组件和组件模板 tcm id?

转载 作者:行者123 更新时间:2023-12-02 05:36:45 24 4
gpt4 key购买 nike

我需要从任何 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());
}

最佳答案

一旦你有了页面对话框的组件展示选项卡,你就可以像这样获得组件展示列表

comPresList = compPresTab.getListComponentPresentations();

您可以像这样检查 XML 格式的列表:

comPresList.getXml()

或者,正如您在代码片段中尝试的那样,您可以使用以下方法获取项目本身:

comPresList.getItems()

这将为您提供 Tridion.ContentManager.ComponentPresentation 对象的列表,您可以对每个对象调用 getComponentIdgetComponentTemplateId

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

我通过 the snippet that John Winter provided you earlier 获得了这些信息,将其粘贴到 Chrome JavaScript 控制台中,然后在源代码树(光盘上)上进行一些文本搜索以查找关键短语,例如 "insert"(以查找 insert< 的所有处理程序 事件)和 ComponentPresentation =(找到 ComponentPresentation 类)。

关于tridion - 如何使用 JavaScript 获取组件和组件模板 tcm id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11579780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com