2012-06-23 1 views
6

В 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> заменяется самозакрывающимся тегом />?тег iframe в компоненте дает неполную страницу при публикации

+2

вы уверены, что «Преобразование XML в HTML» ТВВ присутствует в ваших сообщениях Конца действия? Предполагается, что TBB должен преобразовать XML-нотацию обратно в HTML, предпочитаемый более старым браузером. –

+1

Да 'Конвертировать XML в HTML' TBB присутствует в по умолчанию. –

ответ

6

Как Фрэнк упомянул вы можете использовать Преобразовать XML в HTML Т

(OR) 

Вы могли бы также рассмотреть решение от Криса предусмотрен в этой теме. Creating anchor links in rich text fields with SDL Tridion 2011 SP1

Вы применяете xslt для определения поля схемы. В то время как опция TBB применяется к полной CT/PT в зависимости от того, где вы ее используете, но с XSLT вы можете использовать ее на уровне поля и также получать тот же формат, когда используете CoreService для любых других случаев использования.

+0

Ваша ссылка была полезна. В настоящее время я использую пустой тег div для подавления этого странного поведения, подобного этому: ' ' –

+1

Возможно, решение вашей проблемы может решить вашу проблему, но согласно стандарту html вам не следует использовать какие-либо другие теги в теге iframe. –

0

Я думаю, что это происходит из-за «Clean Up» TBB. Я хотел бы попробовать размещение «пустое» пространство между тегами, что-то вроде этого:

<iframe src="YOUR_URL_HERE" width="100%" height="500" frameborder="0" style="border: 0" > &nbsp;</iframe> 

Это должно сохранить разметку нетронутой и отобразит IFRAME с его закрывающим тегом.

1

Я спросил об этом, и Джейми Сантос помог мне с этим решением.

Я уже использовал Преобразование XML в HTML TBB, но это не сработало, потому что закрывающий тег уже был помещен в выходную переменную.

Итак, следующий TBB использует параметр схемы [Теги], где мы перейдем список тегов (разделенные запятыми) мы хотим изменить само закрывающий тег (например, />) с закрывающим тегом (например)


    [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}>"); 
    } 
}