我正在通过覆盖其中一个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”,但它是否可以在“内容”上使用它?我在扩展配置上遗漏了什么吗?
答案 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)