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 回答