1

すでに「buttonreference」という名前の完全に機能するボタンを作成しています。そして、「TestButton」のように、同じ機能で別の名前の別のボタンを作成しようとしています。これらの手順に従いました。

  1. Testbutton という名前のフォルダーを作成しました。
  2. このフォルダの仮想ディレクトリを作成しました。
  3. システム構成にエディターを作成しました。
  4. しかし、このボタンにアクセスしようとすると、フォルダー「Testbutton」にある PopupReference.js をトリガーするのではなく、buttonreference フォルダーにある PopupReference.js をトリガーします。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);
    }
}
}

誰でも問題を見つけるのを手伝ってくれますか。新しいボタンを作成しているときに何かステップがありませんか? .dll をどこかに保持する必要がありますか?

4

2 に答える 2

2

ポップアップaspxページで更新されたコードのdllをコンパイルする必要があります。そうでない場合は、コードのコンパイル時にページに存在していた値を使用します。

于 2012-08-13T10:57:11.927 に答える
2

私には、すべてがうまくいくように見えます!

C# では、コードを使用して参照グループを呼び出しています。

[ControlResources("RTFExtensions.TestButton")]

また、構成ファイルにグループ「RTFExtensions.TestButton」が含まれているため、すべて問題ないように見えます。

.net プロジェクトをビルドし、DLL を [tridion_home]/web/webUI/webRoot/bin にドロップしましたか?

??

于 2012-08-13T07:34:22.473 に答える