Расширение "пользовательской настройки" внутри 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).