Тег iframe в компоненте отображает неполную страницу публикации
В 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>
заменяется самозакрывающимся тегом />
?
3 ответа
Как сказал Фрэнк, вы можете использовать Преобразование XML в HTML TBB
(OR)
Вы также можете рассмотреть решение Криса, представленное в этой теме. Создание ссылок привязки в полях с расширенным текстом с помощью SDL Tridion 2011 SP1
Вы применяете xslt для определения поля схемы. Хотя опция TBB применяется к полной версии CT/PT в зависимости от того, где вы ее используете, но с XSLT вы можете использовать ее на уровне поля, а также получить тот же формат, когда вы используете CoreService для любых других случаев использования.
Я спросил об этой проблеме, и Джейми Сантос помог мне с этим решением.
Я уже использовал Convert XML to HTML TBB, но это не сработало, потому что закрывающий тег уже был помещен в выходную переменную.
Итак, в следующем TBB используется параметр Schema [Tags], где мы передаем список тегов (с разделителями-запятыми), которые мы хотим изменить самозакрывающимся тегом (например, />) с помощью тега закрытия (например)
[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}>");
}
}
Я думаю, что это связано с "очисткой" TBB. Я бы попробовал поместить "пустое" пространство между тегами, примерно так:
<iframe src="YOUR_URL_HERE" width="100%" height="500" frameborder="0" style="border: 0" > </iframe>
Это должно оставить разметку без изменений и отобразить iframe с закрывающим тегом.