如何扩展Tridion.Cme.Commands.Open.prototype._execute()的默认行为?

时间:2012-10-18 14:30:44

标签: tridion tridion-2011

我编写了一个GUI扩展,它为SDL Tridion CME中的许多Item视图添加了一个额外的选项卡(例如,Component,Page和Schema等)。我还编写了一些JavaScript,如果在URL中指定了加载了选项卡名称的视图,则会直接加载该选项卡。

结果是,如果页面加载了选项卡名称,如下所示:

http://localhost/WebUI/item.aspx?tcm=64#id=tcm:1-48-64&tab=InfoTab

而不是

的默认值
http://localhost/WebUI/item.aspx?tcm=64#id=tcm:1-48-64

“信息”选项卡将加载在顶部,而不是“常规”选项卡。这是使用以下代码片段执行的,并且运行良好:

$evt.addEventHandler($display, "start", onDisplayStarted);

// This callback is called when any view has finished loading
function onDisplayStarted() {

    $evt.removeEventHandler($display, "start", onDisplayStarted);
    var tabname = $url.getHashParam("tab");
    if (tabname != '') {
        var tabControl = $controls.getControl($("#MasterTabControl"), "Tridion.Controls.TabControl");
        tabControl.selectItem(tabname);        
    }
}

现在我想创建一个上下文菜单项来打开项目并使用我的新功能链接到选项卡。我的第一个想法是自己构建Item URL,只需在我的execute方法中打开一个新窗口。所以我查看了GUI的标准Open.prototype_execute()功能中的默认功能。它存储在CME的navigation.js文件中,由Tridion.Cme.Commands.Open.prototype._execute方法执行。代码比我预期的要复杂得多,因为它处理共享项和权限等。

我想知道是否有办法优雅地扩展现有的Open.prototype_execute()函数并将我的“& tab = MyTab”附加到{{1我自己的函数常量。

非常感谢任何建议。

1 个答案:

答案 0 :(得分:3)

最后,Open命令使用$config.getEditorUrl(item_type)获取项目视图的url(item_type - $const.ItemType.COMPONENT等)。这部分功能没有扩展点,但您可以随时尝试覆盖它,风险自负。