8

リボン バーに新しい機能を追加する SDL Tridion 用の新しいエディタを作成しました。これは、次のスニペットを editor.config に追加することで有効になります。

    <!-- ItemCommenting PowerTool -->
    <ext:extension assignid="ItemCommenting" name="Save and&lt;br/&gt;Comment" pageid="HomePage" groupid="ManageGroup" insertbefore="SaveCloseBtn">
      <ext:command>PT_ItemCommenting</ext:command>
      <ext:title>Save and Comment</ext:title>
      <ext:issmallbutton>false</ext:issmallbutton>
      <ext:dependencies>
        <cfg:dependency>PowerTools.Commands</cfg:dependency>
      </ext:dependencies>
      <ext:apply>
        <ext:view name="*" />
      </ext:apply>
    </ext:extension>

これは、ノードでワイルドカード値を使用してすべてのビューに適用されます。これにより、メイン ダッシュボードを含むすべてのビューのリボンに新しいボタンが追加されます。ダッシュボード以外のすべてのビューにこれを追加する方法はありますか? それとも、このようなものを作成する必要がありますか?

    <ext:apply>
        <ext:view name="PageView" />
        <ext:view name="ComponentView" />
        <ext:view name="SchemaView" />
    </ext:apply>

これが必要な結果を得る唯一の方法である場合、すべてのビュー名のリストはどこかにありますか?

4

2 に答える 2

8

Jaime が提供する回避策は機能しません。理由は次のとおりです。

  • isAvailable 対応するコマンドのメソッドが false を返す場合、リボン ツールバーは [作成] タブのボタンのみを非表示にします。
  • RibbonToolbar のほとんどのボタンは、特定のTridion.Controls.RibbonButtonインターフェイスを実装しています。これは、同じ要素のコントロールを取得しようとするとTridion.Controls.Button、同じ html 要素に基づいてまったく異なるコントロールを取得することを意味します。そのため、RibbonToolbar はそれを認識せず、正しく動作しません。
  • RibbonToolbar でボタンを非表示にする場合は、代わりに、RibbonToolbar と RibbonPage でパブリック メソッドを使用する必要があります。したがって、RibbonToolbar によって正しく処理されます。例:
var toolbar = $controls.getControl($("#ItemToolbar"), "Tridion.Controls.RibbonToolbar");
var page = toolbar.getPageById("HomePage");
page.hideItem(buttonId);
page.showItem(buttonId);

元の質問に関しては、これは非常にシンプルで最も簡単な解決策です。

<ext:add>
    <ext:extension assignid="ItemCommenting" name="Save and&lt;br/&gt;Comment" pageid="HomePage" groupid="ManageGroup" insertbefore="SaveCloseBtn">
        <ext:command>PT_ItemCommenting</ext:command>
        <ext:title>Save and Comment</ext:title>
        <ext:issmallbutton>false</ext:issmallbutton>
        <ext:dependencies>
            <cfg:dependency>PowerTools.Commands</cfg:dependency>
        </ext:dependencies>
        <ext:apply>
            <ext:view name="*" />
        </ext:apply>
    </ext:extension>
</ext:add>
<ext:remove>
    <ext:extension id="ItemCommenting">
        <ext:apply>
            <ext:view name="DashboardView" />
        </ext:apply>
    </ext:extension>
</ext:remove>
于 2012-10-19T09:18:39.483 に答える
2

私の知る限り、すべてのビューを指定するか、ワイルドカードを使用する必要があります。isAvailable 機能がリボン ツールバーのボタンで機能するといいですね。コマンドが _isAvailable メソッドで false を返す場合、ボタンは表示されません...

さて、私は回避策を見つけました。コマンドの isAvailable メソッド内で次のようなことができます。

Your.Namespace.PT_ItemCommenting.prototype._isAvailable = function PT_ItemCommenting$_isAvailable(selection) {
    var isAvailable = $display.getView().getId()!='DashboardView';
    if(isAvailable){
        return true;
    }
    var button = $controls.getControl($("#ItemCommenting"), "Tridion.Controls.Button");
    button.hide();
    return false;
};

コマンドを使用できない場合はコマンドを「隠す」ので、これは実際には良い習慣だと思いますよね?

それがどのように機能するか教えてください。

于 2012-10-18T22:43:22.627 に答える