[英]How can you create a context menu item that links to a specific tab in the 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<br/>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工具欄將僅在“創建”選項卡上隱藏按鈕。 Tridion.Controls.RibbonButton
接口。 這意味着,當您嘗試獲取同一元素的Tridion.Controls.Button
控件時 - 您將獲得完全不同的控件,基於相同的html元素。 因此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<br/>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.