在GUI扩展中访问“自定义配置”

时间:2012-11-20 10:42:11

标签: tridion tridion-2011

我正在通过覆盖其中一个javascript文件的行为来进行用户界面的GUI扩展(SiteEdit),以添加一些功能。 javascript文件是“/ Scripts / Components / ExtComponentField.js”,目标是“ SiteEdit ”扩展:

  

Tridion.Web.UI.Editors.SiteEdit.Views.Content

一切都适用于扩展程序,我有我想要的东西,但现在我正在尝试使用

  

设置/ customconfiguration / clientconfiguration

扩展配置的节点,使用一些初始化参数,但无法访问javascript中的 $ config 元素,并且 Tridion.Core.Configuration.Editors [“myExt “] .configuration 为空。

我已经看到在各种javascripts中使用这种自定义配置,如“Dashboard”或“Footprints”,但它是否可以在“内容”上使用它?我在扩展配置上遗漏了什么吗?

3 个答案:

答案 0 :(得分:3)

我担心我没有测试过这个,但你应该可以使用:

Extensions.YourExt.getConfigurationItem = function (itemName, editorName)
{
    var editor = $config.Editors[editorName].configuration;
    if (editor)
    {
        var confXml = $xml.getNewXmlDocument(editor);
        var confObj = $xml.toJson(confXml);

        if (confObj[itemName])
            return confObj[itemName];
        else
            return "";
    }
}

然后您可以通过以下方式使用它:

$this.getConfigurationItem("YOUR_CONFIG_ITEM_NAME", "YOUR_EDITOR_NAME").toString();

在您的扩展程序配置中(<theme>节点下方),您可以输入自己的配置值:

<customconfiguration>
  <clientconfiguration xmlns="http://www.sdltridion.com/2009/GUI/Configuration/Merge">
  <YOUR_CONFIG_ITEM_NAME>The value</YOUR_CONFIG_ITEM_NAME>

你能证实:)

答案 1 :(得分:3)

我通常使用单独的JS文件:

Type.registerNamespace("Extensions.Namespace");

Extensions.Namespace.getEditorConfigSection = function Editor$getEditorConfigSection() {
    if (this._settings === undefined) {
        var editor = $config.Editors["ThisEditorName"];
        if (editor && editor.configuration && !String.isNullOrEmpty(editor.configuration)) {
            var configSectionXmlDoc = $xml.getNewXmlDocument(editor.configuration);
            this._settings = $xml.toJson(configSectionXmlDoc.documentElement);
        }
    }
    return this._settings;
};

并在配置中将其添加到单独的组中:

<cfg:group name="Extensions.Namespace" merge="always">
    <cfg:fileset>
        <cfg:file type="script">/Scripts/Definitions.js</cfg:file>
    </cfg:fileset>
</cfg:group>

然后,无论您需要它,都可以添加以下依赖项:

<cfg:dependency>Extensions.Namespace</cfg:dependency>

然后我通常使用这样的函数来获得某个配置值:

Extensions.Namespace.Something.prototype._getMyConfigValue = function Something$_getMyConfigValue() {
    var configSection = Extensions.Namespace.getEditorConfigSection();
    if (configSection) {
        return configSection.myconfigvalue;
    }
};

答案 2 :(得分:3)

“内容”组中包含的代码在承载您发布的网页的IFRAME内部运行。可以想象,那里包含的文件数量应该最小化,因此很多功能都不可用。

我的建议是只在主窗口中读取配置,然后将所需的设置传递给IFRAME中运行的代码 - 通过使用Tridion.Utils.CrossDomainMessaging实用程序类($ xdm)