我为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>
如果这是实现我需要的结果的唯一方法,是否有某个地方所有视图名称的列表?
答案 0 :(得分:8)
Jaime提供的解决方法不会起作用,因为:
isAvailable
,功能区工具栏将仅在“创建”标签上隐藏按钮
相应命令的方法将返回false。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>
答案 1 :(得分: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;
};
我认为这实际上是一种很好的做法,因为如果命令不可用,它会“隐藏”命令,对吧?
让我知道它是如何运作的。