2012-08-13 13 views
1

我已經有一個全功能的按鈕,名爲「buttonreference」。我試圖創建一個不同的按鈕,具有相同的功能和不同的名稱,如「TestButton」。我遵循了這些步驟。如何爲自定義按鈕觸發PopupReference.js

  1. 創建了一個名爲Testbutton文件夾。
  2. 爲此文件夾創建虛擬目錄。
  3. 在System config中創建編輯器。
  4. 但是,當我試圖訪問這個按鈕,它的觸發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保留在任何地方嗎?

+0

它將調用PopupReference.js從/Popups/PopupReference.js。你確定這是正確的道路嗎?我無法看到它將如何調用任何其他文件,因爲沒有配置其他文件... – 2012-08-13 07:58:56

+0

@Jeremy是傑里米的路徑是正確的。不知道爲什麼它從buttonreference文件夾調用popupreference.js,而不是調用它從測試按鈕文件夾 – SDLBeginner 2012-08-13 08:40:44

回答

2

對我來說,一切看起來不錯,到去!

在C#你調用使用的代碼參照組:

[ControlResources("RTFExtensions.TestButton")] 

我也看到你的配置文件中包含該集團RTFExtensions.TestButton'所以一切看起來正常。

你有沒有內置的.NET項目,並放棄了DLL到[tridion_home]/WEB/WEBUI/WEBROOT/bin中

+0

沒有約翰我沒有建立該項目。並沒有將DLL放入該路徑。 – SDLBeginner 2012-08-13 08:42:14

+0

如果你編譯它並把dll放在那裏,會發生什麼? – 2012-08-13 10:08:29

+0

@Jeremy我正在使用現有的Popupreference.aspx,如果我要創建一個與現有的相同的新錯誤,我無法構建.net解決方案。 – SDLBeginner 2012-08-13 10:23:39

2

必須編譯DLL文件,在彈出的aspx頁面更新的代碼。如果不是的話,當代碼被編譯時,你將使用頁面中存在的任何值。

+0

是的我正面臨編譯我的「 TestButton」。當我用新的popupreference.aspx創建一個新項目時,它給出錯誤,如「您缺少組件參考或命名空間」。 – SDLBeginner 2012-08-13 11:19:16

+1

因此,您只需添加缺少的參考。由於許可限制,通常共享的擴展源代碼將缺少某些參考。 VS會告訴你缺少的東西。 – 2012-08-13 11:33:26

+0

非常感謝..我編譯了我的代碼並放置了DLl。並觸發我的Js .. :) – SDLBeginner 2012-08-13 12:18:08