10

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

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

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

设置/自定义配置/客户端配置

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

我已经看到在“仪表板”或“足迹”等各种 javascript 中使用此自定义配置,但是否可以在“内容”上使用它?我在扩展配置上遗漏了什么吗?

4

3 回答 3

3

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

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

于 2012-11-27T12:39:20.210 回答
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>

你确定吗 :)

于 2012-11-20T22:09:38.310 回答
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;
    }
};
于 2012-11-21T14:30:03.120 回答