我正在创建Tridion GUI扩展,在此我已在功能区工具栏中创建了一个按钮(“InsertCP”)。 场景是:
1.User从组件的Rich Text Box中选择任何文本
2.User单击功能区工具栏中的“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页面:
<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)
{
}
答案 0 :(得分:1)
查看您的更新我收集您想要的是根据ASPX页面中的信息创建一个锚元素到组件的富文本字段的选定文本。
要构建类似的东西,你最好能看到类似的东西。我能想到的最简单的例子是格式功能区工具栏中的超链接按钮。这包括两个项目:
神奇的一切都发生在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中发回的信息,我会说如果你根据某种标准格式化它会更容易,你可以把你的URI放在那里像JSON:
<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 错误,您可以通过添加正确的命名空间参考来解决,如我在answer here中指出的那样。所以只需将它添加到HTML元素中:
<html xmlns:c="http://www.sdltridion.com/web/ui/controls" xmlns="http://www.w3.org/1999/xhtml">
对于无法识别的cc标记前缀,你不需要打扰那个,它似乎在运行时解决得很好,因为你在Tridion上下文中运行它。
答案 1 :(得分: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中执行的所有操作。