【问题标题】:How do you configure an SDL Tridion CME extension for a subset of views?如何为视图子集配置 SDL Tridion CME 扩展?
【发布时间】:2012-10-09 11:29:09
【问题描述】:

我为 SDL Tridion 创建了一个新编辑器,它为功能区栏添加了一些新功能。这是通过将以下 sn-p 添加到 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>

如果这是实现我需要的结果的唯一方法,是否有某处所有视图名称的列表?

【问题讨论】:

    标签: tridion tridion-2011


    【解决方案1】:

    据我所知,您需要指定所有视图或使用通配符。很高兴 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;
    };
    

    我认为这实际上是一个很好的做法,因为如果命令不可用,它会“隐藏”它们,对吧?

    告诉我结果如何。

    【讨论】:

      【解决方案2】:

      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>
      

      【讨论】:

      • 非常好的鲍里斯。很高兴知道这是可能的……如果能参考一下配置文件中可以做什么,那就太好了,所以如果你有任何可以分享的东西,那就太棒了。
      • 是否可以将 用于下划线等开箱即用的字段?
      • 如果您的意思是格式功能区页面上的下划线按钮 - 答案是肯定的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多