簡體   English   中英

如何為視圖子集配置SDL Tridion CME擴展?

[英]How do you configure an SDL Tridion CME extension for a subset of views?

我為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>

如果這是實現我需要的結果的唯一方法,是否有一個所有視圖名稱的列表?

Jaime提供的解決方法將不會起作用,因為:

  • 如果相應命令的isAvailable方法將返回false,則Ribbon工具欄將僅在“創建”選項卡上隱藏按鈕。
  • 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>

據我所知,您需要指定所有視圖或使用通配符。 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;
};

我認為這實際上是一種很好的做法,因為如果它們不可用,它會“隱藏”命令,對吧?

讓我知道它是如何工作的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM