Расширение "пользовательской настройки" внутри GUI-расширения

Я делаю расширение пользовательского интерфейса GUI (SiteEdit), переопределяя поведение одного из файлов javascript, чтобы добавить некоторую функциональность. Файл javascript "/Scripts/Components/ExtComponentField.js" , а цель - SiteEdit ":

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

Все работает хорошо с расширением, и у меня есть то, что я хотел иметь, но теперь я пытаюсь использовать

Настройки/customconfiguration/clientconfiguration

node конфигурации расширения, чтобы использовать некоторые параметры инициализации, но нет способа получить доступ к элементу $config в javascript и Tridion.Core.Configuration.Editors [ "myExt" ]. Конфигурация имеет значение null.

Я видел использование этой настраиваемой конфигурации в различных javascripts, таких как "Dashboard" или "Footprints", но возможно ли это на "Контент"? я что-то пропустил в конфигурации расширения?

Спасибо.

Ответ 1

Боюсь, я не тестировал это, но вы должны иметь возможность использовать:

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> node) вы можете ввести свои собственные значения конфигурации:

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

Можете ли вы подтвердить:)

Ответ 2

Обычно я использую отдельный 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;
    }
};

Ответ 3

Код, содержащийся в группе "Контент", запущен внутри IFRAME, на котором размещена ваша опубликованная веб-страница. Как вы можете себе представить, количество файлов, включенных в него, должно быть сведено к минимуму, и поэтому довольно много функций не доступно.

Мое предложение состояло в том, чтобы прочитать конфигурацию только в главном окне, а затем передать настройки, которые вам нужны для кода, запущенного в IFRAME, - с помощью утилиты класса Tridion.Utils.CrossDomainMessaging($ xdm).