5

Tridionのリボンでカスタムボタンを水平方向に上下に作成する方法で説明した記事に従って、新しいリボングループを取得することができました。

私は今、Guiで何かが変更されたとき(ボタンの非表示/表示)にJavascriptを実行させようとしています。

私はこれを構成に持っています:

<!-- In the cfg:groups part -->
<cfg:group name="ClientGuiMods.ContentGroup" description="">
    <cfg:fileset>
        <cfg:file type="script">/Scripts/CreateRibbonGroup.js</cfg:file>
    </cfg:fileset>
    <cfg:dependencies>
        <cfg:dependency>Tridion.Web.UI.Editors.CME</cfg:dependency>
    </cfg:dependencies>
</cfg:group>

<!-- In the ribbontoolbars add part -->
<ext:extension pageid="HomePage" name="Content" assignid="ContentGroupId">
    <ext:group>~/Scripts/ContentGroup.ascx</ext:group>
    <ext:dependencies>
        <cfg:dependency>ClientGuiMods.ContentGroup</cfg:dependency>
    </ext:dependencies>
    <ext:apply>
        <ext:view name="DashboardView">
            <ext:control id="DashboardToolbar" />
        </ext:view>
    </ext:apply>
</ext:extension>

そしてこれはJavascriptで:

Type.registerNamespace("ClientGuiMods");

ClientGuiMods.ContentGroup = function ContentGroup(element)
{
    console.log('RibbonGroupCreated');
    Tridion.OO.enableInterface(this, "ClientGuiMods.ContentGroup");
    this.addInterface("Tridion.Controls.RibbonItemsGroup", [element]);
};

this.addInterface()に対してさまざまな引数を試しましたが、呼び出されることはありません。これは正しい方法ですか?または、ホームリボンツールバーで呼び出されるスクリプトを取得する別の方法はありますか?

4

3 に答える 3

3

私はグループをコマンド (読み取りボタン) のコンテナ以外のものと見なしたことはありません。そのため、私が使用した唯一のインターフェイスTridion.Cme.Commandはボタン JavaScript です。

しかし、あなたが探しているのは、 ContentGroup.ascx.cs で指定できる ControlResource だと思います

using Tridion.Web.UI.Core;
using Tridion.Web.UI.Controls;
using Tridion.Web.UI.Core.Controls;

namespace ClientGuiMods
{
    [ControlResources("ClientGuiMods.ContentGroup")]
    public class ContentGroup : TridionUserControl
    {
    }
}

Tridion.ControlBaseこれで、JavaScript でインターフェースを使用できるようになりました。

Type.registerNamespace("ClientGuiMods");

ClientGuiMods.ContentGroup = function ContentGroup(element) {
    console.log('RibbonGroupCreated');
    Tridion.OO.enableInterface(this, "ClientGuiMods.ContentGroup");
    this.addInterface("Tridion.ControlBase", [element]);
};

ClientGuiMods.ContentGroup.prototype.initialize = function ContentGroup$initialize() {
    // the control is initialized here, we can use the following properties now
    var props = this.properties;
    var controls = props.controls;
    var container = this.getElement();
};
于 2012-08-29T10:14:00.193 に答える
1

@Bart、私は解決策を試しましたが、うまくいきませんでした。

ChromeのJavascriptをもう少し掘り下げてみると、RibbonGroupとして余分なJavascriptを起動するフックがないことがわかりました(間違っている場合は修正してください)。

ただし、「ホームページ」RibbonPageにアクセスして、そこからイベントを発生させる方法を見つけました。

必要な追加機能は、DOMのHomePageという名前のRibbonPageにある「c:pagetype='Homepage'」です。これはデフォルトではありません。これは、最後にロードイベントスクリプトを含めることで設定できます。これで、私のスクリプトは次のようになります。

Type.registerNamespace("ClientGuiMods");

ClientGuiMods.CreateRibbonPage = function CreateRibbonPage(element)
{
    Tridion.OO.enableInterface(this, "ClientGuiMods.CreateRibbonPage");
    this.addInterface("Tridion.Controls.RibbonPage", [element]);
};
ClientGuiMods.CreateRibbonPage.prototype.updateState = function CreateRibbonPage$updateState(stateObject)
{
    //...
    //Ribbonpage logic to update the state of your buttons and groups
};

console.log('Homepage: ' + document.getElementById('HomePage')); //.setAttribute('c:pagetype', 'HomePage');

var ClientScripts = {
    registerHomepage: function() {
        console.log('adding c:pagetype att');

        var homepage = document.getElementById('HomePage');

        if (homepage) {

            homepage.setAttribute('c:pagetype', 'HomePage');


        }
    }
}
if (document.addEventListener && !Tridion.Utils.Dom.isIE)
    $evt.addEventHandler(window, "DOMContentLoaded", ClientScripts.registerHomepage);
else
    $evt.addEventHandler(window, "readystatechange", ClientScripts.registerHomepage);

Tridion.Controls.Deck.registerPageType(ClientGuiMods.CreateRibbonPage, "HomePage");
于 2012-08-29T11:55:09.533 に答える
1

私はここでマークを外しているかもしれませんが、同じグループの下に一連のボタンがあり、可用性の観点からそれらを一貫して動作させたいようです。

保存、保存と終了、および保存と新規操作で同じイベントを発生させる必要がある同様のケースがありました。私がやったことは、コードをSaveコマンド拡張機能(ここではJaimeの詳細に大まかに基づいています)として記述し、次にSaveCloseおよびSaveNew拡張機能からSave._isEnabled関数とSave._isAvailable関数を呼び出して、コマンドが利用可能であり、編集者がSaveClose&SaveNewをクリックするたびにSave._executeを実行します。

ピーターの提案ほどエレガントではありませんが、仕事は終わりました。

于 2012-08-30T15:57:38.787 に答える