0

我创建了一个用户控件,用于有两个按钮一个在另一个下方

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ViewItemsGroup.ascx.cs" Inherits="SDL.Examples.UI.Controls.ViewItemsGroup" %>
<%@ Import Namespace="Tridion.Web.UI" %> 
<c:RibbonItemsGroup runat="server"  ID="RibbonItemsGroup">   
  <c:RibbonButton runat="server" CommandName="ViewStaging" Title="View in Staging" Label="View In Staging" IsSmallButton="true" ID="ViewStagingBtn" />   
  <c:RibbonButton runat="server" CommandName="ViewLive" Title="View in Live" Label="View in Live" IsSmallButton="true" ID="ViewLiveBtn" /> 
</c:RibbonItemsGroup> 

在 extension.config 我指的是用户控件,如下所示。

<ext:extension assignid="ViewItemsGroup" groupid="EditGroup" name="View" pageid="HomePage" insertbefore="PublishGroup">  
  <ext:group>~/Controls/ViewItemsGroup.ascx</ext:group> 
  <ext:dependencies>      
    <cfg:dependency>My.Theme</cfg:dependency>
  </ext:dependencies>  
  <ext:apply>    
    <ext:view name="DashboardView">   
      <ext:control id="DashboardToolbar" /> 
    </ext:view>   
    <ext:view name="PageView">   
      <ext:control id="ItemToolbar" />  
    </ext:view>  
  </ext:apply>
</ext:extension> 
  1. 我是否还需要在 extension.config 中包含我的按钮详细信息(在用户控件中提到的 ID)?是否需要添加<ext:command> ---- </ext:command> 或其他任何地方。

  2. 创建的用户控件,我只是与 extension.config、.js 一起放置,并在我的 extension.config 文件中引用 ascx。我需要将我的用户控件放在任何其他文件夹中吗?

4

1 回答 1

5
  1. 在您的 extension.config 中,您指定节点下 ItemsGroup 的依赖项ext:dependencies。这应该指向cfg:group您引用命令集的位置,该命令集又指向您的 JavaScript 文件。您需要正确地进行这些引用,否则 SDL Tridion UI 框架将不知道在哪里可以找到您的代码。系统就像我们无法施展魔法一样,也没有水晶球。

  2. 用户控件也是如此,如果您不将它与配置、JavaScript 和 CSS 等其他扩展文件放在一起,那么 UI 框架将如何找到它。您放置它的位置,您在ext:group节点中指定。例如,然后您将其放置在扩展根~/Controls/MyItemsGroup.ascx目录中的子目录中。Controls

您的配置应该看起来像这样,依赖项指向您在resources节点下指定的组:

<ext:ribbontoolbars>
  <ext:add>
    <ext:extension assignid="MyGroup" ...>
      <ext:group>~/Controls/MyItemsGroup.ascx</ext:group>
      <ext:dependencies>
        <cfg:dependency>My.Commands</cfg:dependency>
      </ext:dependencies>
      ...
    </ext:extension>
  </ext:add>
</ext:ribbontoolbars>

然后在您的控件中,您直接在其属性中引用该命令,这是_isAvailable_isEnabled方法所在的 JavaScript 命令等。该控件将具有以下内容:

<c:RibbonItemsGroup runat="server" ID="MyItemsGroup">
  <c:RibbonButton runat="server" 
                  CommandName="MyBtn" 
                  Title="My Title" Label="My Label" 
                  IsSmallButton="true" ID="MyId" />
  ...
 </c:RibbonItemsGroup>

最后,实现您的按钮命令的 JavaScript 将在其命名空间中使用 CommandName:

Type.registerNamespace("Extensions");

Extensions.MyBtn = function Extensions$MyBtn() {
  Type.enableInterface(this, "Extensions.MyBtn");
  this.addInterface("Tridion.Cme.Command", ["MyBtn"]);
};

Extensions.MyBtn.prototype._isAvailable = function MyBtn$_isAvailable(selection) {
  return true;
};

Extensions.MyBtn.prototype._isEnabled = function MyBtn$_isEnabled(selection) {
  return this._isAvailable(selection);
};

Extensions.MyBtn.prototype._execute = function MyBtn$_execute(selection) {
  // this is where your code comes
};
于 2012-08-12T10:37:52.830 回答