1

我们确实从 Tridion 5.3 升级到了 Tridion 2011 SP1。

在 Tridion 5.3 中,我们使用的是 VBScript 模板,作为此次升级的一部分,我们将现有的 VBScript 模板转换为复合组件模板。我们面临下面提到的两个关于 RTF 字段内容的问题。

问题 1:在我们现有的 RTF 字段内容中,我们在多个位置有空标签/HTML 标签。例如。<a name="Contact" id="Contact"></a> 当我们使用复合组件模板(Tridion 2011 SP1 环境)发布内容时,上面提到的锚标记正在转换为<a name="Contact" id="Contact" />. 这破坏了现有的 javascript 功能。为了克服这个问题,我们编写了 C# 函数来查找空标签并用&nbsp;like替换内部文本,<a name="Contact" id="Contact">&nbsp;</a>然后一切正常。但是在 CT 级别为每个 RTF 字段调用此函数是一项很大的活动,因为我们有编号 Component Tempate。有没有更好的方法来做到这一点。

问题 2:在同一个 RTF 字段中,我们有类似的内容&#160;(可能是编辑从网络或其他地方复制粘贴),所以当我们尝试发布页面或组件时,它会因错误而失败。JScriptException:表达式值未终止的字符串常量。

是否有任何默认的 TBB 可以帮助解决问题?

4

2 回答 2

2

问题一:

您还可以使用Filtering XSLT在组件保存时修改您的 RTF 内容。

这样,您可以将任何空标签替换<tag></tag><tag>&nbsp;</tag>组件保存,并且不需要对模板进行任何进一步的更改。

问题 2:

&#160;看起来像一个编码&nbsp;,见字符代码:http ://www.escapecodes.info/

也许您可以使用过滤 xslt 或 C# TBB 用正确的 html 编码替换此字符代码

于 2012-11-02T08:49:55.937 回答
0

由于您已经具有将内联封闭锚标签转换为其中包含不间断空格的锚标签的功能,您可以考虑在页面模板中使用此功能,而不是在每个组件模板中使用它;这将需要更少数量的模板来更改...

您可能还需要考虑用正确闭合的锚标记替换内联闭合锚标记,而无需实际插入额外的空格。

下面是一个 C# 片段,您可以在 TBB 中使用它来替换内联封闭锚标记:

Item outputItem = package.GetByName(pcakge.OutputName);
package.Remove(outputItem);
string outputString = Regex.Replace(outputItem.GetAsString(), "(<a[^>]*?)/>", "$1></a>", RegexOptions.Singleline);
outputItem.SetAsString(outputString);
package.PushItem(Package.OutputName, outputItem);

您可以将其扩展为也替换   与   但这不应该引起任何问题,如   是 HTML 中的有效转义序列(Tridion RTF 字段本质上是 XML,这可能是   出现而不是  ... 的原因)。

于 2012-11-22T10:09:52.477 回答