在Tridion中,我有一个附加了组件的页面,其中包含一个文本字段,其中有一个iframe
标记,如<iframe src="http://mysite.com/l/5042/2012-06-21/9pb4y" width="100%" height="500" frameborder="0" style="border: 0" > </iframe>
。我确保此标记在C# & DWT template building blocks
处理时保持不变。但是在页面发布时,在页面源中,标记会更改为<iframe src="http://mysite.com/l/5042/2012-06-21/9pb4y" width="100%" height="500" frameborder="0" style="border: 0" />
。因此,页面源不会在iframe
标记后显示任何内容。因此,包含iframe
标记的组件之后附加到页面的任何组件都不会显示在页面上。知道为什么结束标记</iframe>
被自闭标记/>
替换?
答案 0 :(得分:6)
正如弗兰克所说,你可以使用Convert XML to HTML TBB
(OR)
您还可以考虑Chris在此主题中提供的解决方案。 Creating anchor links in rich text fields with SDL Tridion 2011 SP1
您可以将xslt应用于架构字段定义。虽然TBB选项适用于完整的CT / PT,具体取决于您使用它的位置,但使用XSLT,您可以在字段级别使用它,并在将CoreService用于任何其他用例时获得相同的格式。
答案 1 :(得分:1)
我问过这个问题,Jamie Santos帮我解决了这个问题。
我已经在使用将XML转换为HTML TBB ,但这不起作用,因为结束标记已经放在输出变量中。
因此,以下TBB使用参数Schema [Tags],我们传递一个标签列表(逗号分隔),我们想要用Closing标签(例如)
[TcmTemplateTitle("Remove Selft Closing Tag")]
public class RemoveSelfClosingTag : ITemplate
{
public override void Transform(Engine engine, Package package)
{
var outputItem = package.GetByName(Package.OutputName);
//if not Output in package, return
if (outputItem == null) return;
var output = outputItem.GetAsString();
var tagsCsv = package.GetValue("Tags"); //TBB parameter [tags using CSV] : 'iframe'
if (string.IsNullOrEmpty(tagsCsv)) return;
var tags = tagsCsv.Split(',');
foreach (var tag in tags)
{
RemoveSelftTag(tag, ref output);
}
outputItem.SetAsString(output);
}
//ref because string is immutable.
private void RemoveSelftTag(string tagName, ref string output)
{
var pattern = string.Format("(?'fistPart'<(?'tag'{0})[^>]+?)/>", tagName);
output = Regex.Replace(output, pattern, @"${fistPart}></${tag}>");
}
}
答案 2 :(得分:0)
我认为这是由于&#34;清理&#34; TBB。我会尝试放置一个空的&#34;标签之间的空格,如下所示:
<iframe src="YOUR_URL_HERE" width="100%" height="500" frameborder="0" style="border: 0" > </iframe>
这应该保持标记不变,并显示iframe及其结束标记。