0

我正在创建 Tridion GUI 扩展,在此我在功能区工具栏中创建了一个按钮(“InsertCP”)。场景是:

1.用户从组件的富文本框中选择任何文本
2.用户单击功能区工具栏中的“InsertCP”按钮。
3.当用户单击按钮时,我正在打开我的自定义 aspx 页面。
4.从自定义aspx页面,用户可以选择“组件”和“组件模板”。
5.我将选定的组件和组件模板 tcm id 存储在一个变量中。
6.我在自定义aspx页面中有提交按钮。
7.当用户单击提交按钮时,我需要在富文本框源中格式化所选文本,如下所示。

前任:

<a href="componentid=tcm-00-000, componenttemplateid="tcm-00-000-00">Selected Text</a>

我已经完成了第 6 步,我正在尝试第 7 步,当我单击提交按钮时无法提交所选 ID。

当我在我的 aspx 页面中添加 tridion 控件时出现这些错误

我的 ASPX 页面:

<html xmlns="http://www.w3.org/1999/xhtml"     xmlns:c="http://www.sdltridion.com/web/ui/controls"> 
<head runat="server">
<title></title>
<cc:tridionmanager runat="server" editor="ExampleEditor"     isstandaloneview="true">     
<dependencies runat="server">                
<dependency runat="server">Tridion.Web.UI.Editors.CME</dependency>         
 <dependency      runat="server">Tridion.Web.UI.Editors.CME.Controls</dependency>     
</dependencies> 
</cc:tridionmanager> 
</head>

<div>
    <asp:TextBox ID="txttags" runat="server" Width="800px"      ></asp:TextBox>       
    <asp:Button ID="btnsubmit" runat="server" Text="Submit"     onclick="btnsubmit_Click"  /> 

         <c:button id="InsertButton" runat="server" class="customButton greybutton" label="Insert" />         
</div>

CS代码:

protected void btnsubmit_Click(object sender, EventArgs e)
    {
txttags.Text = "anyvalue.";
}

和java脚本与退出脚本相同。但是我在运行时遇到错误。我需要在cs页面中添加任何命名空间吗?

我的 CS 页面会有很多像下面这样的事件。我不能在这个页面上使用 tridion 控制按钮。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tridion.ContentManager.CoreService.Client;
using System.Xml.Linq;
using System.Xml;


namespace Somename
{

public partial class Classname
{

    protected void Page_Load(object sender, EventArgs e)
    {

    }


    protected void ddSelectOption_SelectedIndexChanged(object sender, EventArgs e)
    {



    }


    protected void lbPublication_SelectedIndexChanged(object sender, EventArgs e)
    {

    }


    protected void lbPubFolders_SelectedIndexChanged(object sender, EventArgs e)
    {


    }


    protected void lbComponent_SelectedIndexChanged(object sender, EventArgs e)
    {

    }


    protected void lbComponentTemplate_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
4

2 回答 2

1

查看您的更新,我收集到您想要的是将基于 ASPX 页面中的信息的锚元素创建到组件的富文本字段的选定文本中。

要构建类似的东西,你最好看看可用的类似东西。我能想到的最简单的示例是“格式”功能区工具栏中的“超链接”按钮。这包括两个项目:

  1. ..\Tridion\WebUI\Editors\CME\Views\Popups\Link\Link.aspx
  2. ..\Tridion\WebUI\Editors\CME\Views\Popups\Link\Link.js

魔法全部发生在 JavaScript 文件中(通常在这些 UI 扩展中完成)。在该initialize()方法中,选择的部分是这样提取的:

var p = this.properties;
var c = p.controls;

// Get selected acronym
p.OldLink = (window.dialogArguments && window.dialogArguments.link) ? window.dialogArguments.link : {};

回帖到富文本字段的_onOkButtonClicked(event)方法如下:

this._buildNewLinkHtml();
this.fireEvent("submit", { link: this.properties.NewLink });
window.close();

您可以仔细查看 Link.js 文件中的其余代码并重新构建它以满足您的需要。

顺便说一句,看看你想在href中发回的信息,如果你根据某种标准对其进行更多格式化,我会说它更容易,例如你可以像JSON一样将你的URI放在那里:

<a href="{'component'='tcm:1-23','componenttemplate'='tcm:1-45-32'}">text</a>

甚至可能滥用组件模板 URI 的 title 属性:

<a href="tcm:1-23" title="tcm:1-45-32">text</a>

因为我假设您的组件模板代码将使用这些值对这个超链接结构做一些特殊的事情。

编辑

您在添加的图像中显示的无法识别的标签前缀 c错误,您可以通过添加正确的命名空间引用来解决,正如我在此处的回答中指出的那样。因此,只需将其添加到您的 HTML 元素中:

<html xmlns:c="http://www.sdltridion.com/web/ui/controls" xmlns="http://www.w3.org/1999/xhtml"> 

至于unrecognized cc tag prefix,你不应该打扰那个,它似乎在运行时解决得很好,因为你在 Tridion 上下文中运行它。

于 2012-08-08T08:53:44.837 回答
1

我将为您更新的问题提供第二个答案,尽管您仍然让我们有点不知所措,因为您只提到您遇到了运行时错误,而不是具体是什么(如果我不知道你得到什么错误)。

您的 ASPX 页面应如下所示:

<%@ Page Language="C#" AutoEventWireup="true" Inherits="Example.MyPopup" ClassName="MyPopup" %>
<%@ Import Namespace="Tridion.Web.UI" %>
<%@ Register TagPrefix="ui" Namespace="Tridion.Web.UI.Editors.CME.Controls" Assembly="Tridion.Web.UI.Editors.CME" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html id="MyPopup" class="tridion popup" xmlns:c="http://www.sdltridion.com/web/ui/controls" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>My Popup Example</title>
        <cc:TridionManager runat="server" Editor="ExampleEditor" IsStandAloneView="false">
            <dependencies runat="server">        
                <dependency runat="server">Tridion.Web.UI.Editors.CME</dependency>
                <dependency runat="server">Tridion.Web.UI.Editors.CME.Controls</dependency>
            </dependencies>
        </cc:TridionManager>
    </head>
    <body>
        <table id="tblHeight" border="0" cellpadding="0" cellspacing="0">
            <tr>
                <td id="InputField" valign="top">
                    <table>
                        <tr>
                            <td id="NameLabelCell" nowrap="nowrap">My Label</td>
                            <td><input id="txttags" name="txttags" value="" tabindex="1" /></td>
                        </tr>
                    </table>
                </td>
            </tr>
            <tr id="FooterRow">
                <td class="footer" align="right">
                    <div class="BtnWrapper">
                        <c:Button ID="BtnOk" runat="server" TabIndex="2" Label="<%$ Resources: Tridion.Web.UI.Strings, OK %>" />
                        <c:Button ID="BtnCancel" runat="server" TabIndex="3" Label="<%$ Resources: Tridion.Web.UI.Strings, Cancel %>" />
                    </div>
                </td>
            </tr>
        </table>
    </body>
</html>

注意:表格标记是直接从 Anchor 弹出窗口复制的,您可以随意使用 div 并以任何您想要的方式设置样式,该示例旨在向您展示如何重用现有的 Tridion 控件 您的 CS 将变为:

using Tridion.Web.UI.Core;
using Tridion.Web.UI.Controls;
using Tridion.Web.UI.Core.Controls;
using Tridion.Web.UI.Editors.CME.Views.Popups;

namespace Example
{
    [ControlResources("Example.MyPopup")]
    public class MyPopup : PopupView
    {
    }
}

它不包含任何内容,也不需要包含任何内容,因为您将在 JavaScript 中执行所有操作,如前所述。

于 2012-08-10T10:00:05.503 回答