【问题标题】:How to access properties of a Tridion component like schema name based on which it is created in aspx page?如何访问 Tridion 组件的属性,例如基于它在 aspx 页面中创建的架构名称?
【发布时间】:2012-04-15 22:33:27
【问题描述】:

我通过在 TRIDION 2011 SP1 版本中添加一个按钮来自定义功能区工具栏。 当我单击该按钮时,它将打开一个 aspx 页面。在该 aspx 页面中,我需要在创建组件本身之前访问用于创建该组件的架构的名称(我的意思是在创建组件本身时)。

请提供解决此问题的方法。提前致谢。

【问题讨论】:

  • 感谢您的回复。我已经尝试使用 webdav url 访问文件夹中存在的所有组件。我的目标是打开一个弹出页面,其中包含一些下拉列表,这些下拉列表将根据用于创建组件的架构进行填充。这里的主要问题是这一切都应该在保存组件之前发生。(所以我无法访问 tcm uri id 来获取架构名称,因为一旦我们保存组件就会创建 tcm uri)
  • 您是否尝试过有关 GUI 扩展的许多教程和示例?只需在谷歌上搜索“tridion gui 扩展”,您就会发现很多,包括分步操作。如果您已经尝试过,那么我认为您可能缺少一些 Tridion 基础知识...

标签: tridion


【解决方案1】:

如果你有组件(作为一个对象),你可以得到它的模式 id,就像 Peter 指出的那样。如果您只有组件 ID,则可以加载组件并通过该组件访问架构。

当您需要加载任何项目时,您必须注意它不是 UI API 中的同步调用,因此您应该为此使用委托方法。例如这样的:

Example.prototype._loadItemInformation = function Example$_loadItemInformation(itemId, reload) {
    var item = $models.getItem(itemId);
    if (item) {
        var self = this;
        function Example$_loadItemInformation$_onItemLoaded() {
            $evt.removeEventHandler(item, "load", Example$_loadItemInformation$_onItemLoaded);
            // proceed with the actions on the loaded item here
        };

        if (item.isLoaded(true) && !reload) {
            Example$_loadItemInformation$_onItemLoaded();
        }
        else {
            $evt.addEventHandler(item, "load", Example$_loadItemInformation$_onItemLoaded);
            //$evt.addEventHandler(item, "loadfailed", Example$_loadItemInformation$_onItemLoadFailed);
            item.load(reload, $const.OpenMode.VIEW);
        }
    }
};

还要注意项目可能无法加载,实际上您还应该为 loadfailed 注册一个事件处理程序(正如我的示例代码忽略的那样)。

【讨论】:

    【解决方案2】:

    您应该将它传递给您的弹出窗口。 Schema 的 URI 在 CME 中的组件模型对象上可用 - 因此您的按钮命令可以访问它并将其传递给弹出窗口(例如在 URL 中)。

    var schemaId = $display.getView().getItem().getSchemaId();
    

    【讨论】:

    • 能否请您提供链接/API,我可以在其中获得有关组件模型对象的更多方法。由于我的进一步工作需要在弹出窗口的控件中获取值。任何指导方针都会对我有所帮助。提前致谢。
    • 我认为没有任何 API 文档。但如果您使用开发者工具(例如浏览器内置的工具),您可以看到所有可用的方法。
    • 您可以在docportal.sdl.com/sdltridion 上找到文档,您要查找的是“SDL Tridion 2011 SP1 GUI Extension API”
    • @PeterKjaer 你能否给我一个返回当前组件 tcmURI 的命令。(组件已经保存并且 tcmURI 存在)。提前致谢。
    • var itemId = $display.getView().getItem().getId();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多