2012-10-18 55 views
8

我已經爲SDL Tridion創建了一個新的編輯器,它爲Ribbon Bar添加了一些新功能。這是通過將下面的代碼片段添加到editor.config如何爲視圖子集配置SDL Tridion CME擴展?

<!-- 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> 

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

回答

8

解決辦法將不會再工作,因爲:

  • 帶狀條工具欄將只隱藏創建選項卡上的按鈕,如果相應的命令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> 
+0

很不錯的鮑里斯。很高興知道這是可能的......如果能夠在配置文件中做些什麼可以參考是很好的,所以如果你有什麼可以共享的,那就太棒了。 –

+0

不幸的是,一切都在我心中:) –

+0

是否可以使用作爲開箱即用的字段,如Underscore? –

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; 
}; 

我覺得這其實是一個很好的做法,因爲這將「隱藏」的命令,如果他們不應該用,對不對?

讓我知道它是如何工作的。由Jaime提供

+0

我喜歡當一個解決辦法走到一起 –

相關問題