我已經有一個全功能的按鈕,名爲「buttonreference」。我試圖創建一個不同的按鈕,具有相同的功能和不同的名稱,如「TestButton」。我遵循了這些步驟。如何爲自定義按鈕觸發PopupReference.js
- 創建了一個名爲Testbutton文件夾。
- 爲此文件夾創建虛擬目錄。
- 在System config中創建編輯器。
- 但是,當我試圖訪問這個按鈕,它的觸發PopupReference.js這是buttonreference夾,而不是觸發PopupReference.js這是在我的文件夾「Testbutton」。我不知道爲什麼它不觸發我的js?
我Testbutton.js如下:
Type.registerNamespace("RTFExtensions.Commands");
RTFExtensions.Commands.TestButton = function Commands$TestButton(name) {
Type.enableInterface(this, "RTFExtensions.Commands.TestButton");
this.addInterface("Tridion.Cme.Command", [name || "TestButton"]);
this.addInterface("Tridion.Cme.FaCommand", [name || "TestButton"]);
};
RTFExtensions.Commands.TestButton.prototype._isAvailable = function TestButton$_isAvailable(target) {
if (target.editor.getDisposed()) {
return false;
}
return true;
};
RTFExtensions.Commands.TestButton.prototype._isEnabled = function TestButton$_isEnabled(target) {
if (!Tridion.OO.implementsInterface(target.editor, "Tridion.FormatArea") || target.editor.getDisposed()) {
return false;
}
return true;
};
RTFExtensions.Commands.TestButton.prototype._execute = function TestButton$_execute(target) {
if (target.item.isActivePopupOpened()) {
return;
}
function TestButton$execute$onPopupCanceled(event) {
target.item.closeActivePopup();
};
var url = $config.expandEditorPath("/Popups/PopupReference.aspx","TestButton");
//alert(url);
var popup = $popup.create(url,"toolbar=no,width=900,height=800,resizable=yes,scrollbars=yes", null);
$evt.addEventHandler(popup, "submit",
function TestButton$execute$onPopupSubmitted(event) {
alert('Inside testbuttonjs');
// Release
target.item.closeActivePopup();
}
);
$evt.addEventHandler(popup, "unload", TestButton$execute$onPopupCanceled);
target.item.setActivePopup(popup);
popup.open();
};
我TestButton配置文件是這樣的:
<?xml version="1.0"?>
<Configuration xmlns="http://www.sdltridion.com/2009/GUI/Configuration/Merge" xmlns:cfg="http://www.sdltridion.com/2009/GUI/Configuration" xmlns:ext="http://www.sdltridion.com/2009/GUI/extensions" xmlns:cmenu="http://www.sdltridion.com/2009/GUI/extensions/ContextMenu">
<resources cache="true">
<cfg:filters/>
<cfg:groups>
<cfg:group name="RTFExtensions.TestButton">
<cfg:fileset>
<cfg:file type="script">/Popups/PopupReference.js</cfg:file>
</cfg:fileset>
<cfg:dependencies>
<cfg:dependency>Tridion.Web.UI.Editors.CME</cfg:dependency>
<cfg:dependency>Tridion.Web.UI.Editors.CME.commands</cfg:dependency>
</cfg:dependencies>
</cfg:group>
<cfg:group name="RTFExtensions.TestButton.Commands" merger="Tridion.Web.UI.Core.Configuration.Resources.CommandGroupProcessor" include="byreference" merge="release">
<cfg:fileset>
<cfg:file type="script">/Commands/TestButton.js</cfg:file>
<cfg:file type="reference">RTFExtensions.TestButton.CommandSet</cfg:file>
</cfg:fileset>
<cfg:dependencies>
<cfg:dependency>Tridion.Web.UI.Editors.CME</cfg:dependency>
<cfg:dependency>Tridion.Web.UI.Editors.CME.commands</cfg:dependency>
</cfg:dependencies>
</cfg:group>
</cfg:groups>
</resources> <definitionfiles/>
<extensions>
<ext:editorextensions>
<ext:editorextension target="CME">
<ext:editurls/>
<ext:listdefinitions/>
<ext:taskbars/>
<ext:commands/>
<ext:commandextensions/>
<ext:contextmenus/>
<ext:lists/>
<ext:tabpages/>
<ext:toolbars/>
<ext:ribbontoolbars>
<ext:add>
<!-- RIBBON TAB -->
<!-- GROUPS -->
<ext:extension assignid="ExtensionGroup" pageid="FormatPage" name="RTF Extensions">
<ext:group/>
<ext:apply>
<ext:view name="ComponentView">
<ext:control id="ItemToolbar"/>
</ext:view>
</ext:apply>
</ext:extension>
<!-- BUTTONS -->
<ext:extension pageid="FormatPage" groupid="ExtensionGroup" name="TestButton" assignid="TestButton">
<ext:command>TestButton</ext:command>
<ext:title>TestButton</ext:title>
<ext:dependencies>
<cfg:dependency>RTFExtensions.TestButton.Commands</cfg:dependency>
</ext:dependencies>
<ext:apply>
<ext:view name="ComponentView">
<ext:control id="ItemToolbar"/>
</ext:view>
</ext:apply>
</ext:extension>
</ext:add>
</ext:ribbontoolbars>
</ext:editorextension>
</ext:editorextensions>
<ext:dataextenders/>
</extensions>
<commands>
<cfg:commandset id="RTFExtensions.TestButton.CommandSet">
<cfg:command name="TestButton" implementation="RTFExtensions.Commands.TestButton"/>
<cfg:dependencies>
<cfg:dependency/>
</cfg:dependencies>
</cfg:commandset>
</commands>
<contextmenus/>
<localization/>
<settings>
<defaultpage/>
<navigatorurl/>
<editurls/>
<listdefinitions/>
<itemicons/>
<theme>
<path>Themes</path>
</theme>
<customconfiguration/>
</settings>
</Configuration>
我PopupReference.Js是這樣的:
Type.registerNamespace("RTFExtensions.Popups");
RTFExtensions.Popups.PopupReference = function (element) {
Type.enableInterface(this, "RTFExtensions.Popups.PopupReference");
this.addInterface("Tridion.Cme.View");
};
RTFExtensions.Popups.PopupReference.prototype.initialize = function() {
$log.message("Initializing Button Reference popup...");
this.callBase("Tridion.Cme.View", "initialize");
$log.message("Initializing TestButton Reference popup...");
var p = this.properties;
var c = p.controls;
p.HtmlValue = { value: null };
c.InsertButton = $controls.getControl($("#InsertButton"), "Tridion.Controls.Button");
$evt.addEventHandler(c.InsertButton, "click", this.getDelegate(this._execute));
};
RTFExtensions.Popups.PopupReference.prototype._execute = function() {
alert('Inside Popupreferencejs');
this.fireEvent("submit", this.properties.HtmlValue);
window.close();
};
$display.registerView(RTFExtensions.Popups.PopupReference);
我的TestButton的CS頁面如下所示:
namespace Tridion.GUI.Extensions.RTF.Popups
{
[ControlResourcesDependency(new Type[] { typeof(Popup), typeof(Tridion.Web.UI.Controls.Button), typeof(Stack), typeof(Dropdown), typeof(List) })]
[ControlResources("RTFExtensions.TestButton")]
public partial class PopupReference : TridionPage
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
TridionManager tm = new TridionManager();
tm.Editor = "RTFTestButton";
System.Web.UI.HtmlControls.HtmlGenericControl dep = new System.Web.UI.HtmlControls.HtmlGenericControl("dependency");
dep.InnerText = "Tridion.Web.UI.Editors.CME";
tm.dependencies.Add(dep);
System.Web.UI.HtmlControls.HtmlGenericControl dep2 = new System.Web.UI.HtmlControls.HtmlGenericControl("dependency");
dep2.InnerText = "Tridion.Web.UI.Editors.CME.commands";
tm.dependencies.Add(dep2);
//Add them to the Head section
this.Header.Controls.Add(tm); //At(0, tm);
}
}
}
誰能幫我找到這個問題。我是否在創建新按鈕時缺少anystep?我需要將.dll保留在任何地方嗎?
它將調用PopupReference.js從/Popups/PopupReference.js。你確定這是正確的道路嗎?我無法看到它將如何調用任何其他文件,因爲沒有配置其他文件... – 2012-08-13 07:58:56
@Jeremy是傑里米的路徑是正確的。不知道爲什麼它從buttonreference文件夾調用popupreference.js,而不是調用它從測試按鈕文件夾 – SDLBeginner 2012-08-13 08:40:44