2012-06-23 18 views
6

En Tridion tengo una página a la que se adjunta un componente que tiene un campo de texto en el que hay una etiqueta iframe como <iframe src="http://mysite.com/l/5042/2012-06-21/9pb4y" width="100%" height="500" frameborder="0" style="border: 0" > </iframe>. Me aseguro de que esta etiqueta permanezca como está mientras se procesa por C# & DWT template building blocks. Pero al final, cuando se publica la página, en el origen de la página, la etiqueta cambia a <iframe src="http://mysite.com/l/5042/2012-06-21/9pb4y" width="100%" height="500" frameborder="0" style="border: 0" />. Debido a esto, la fuente de la página no muestra ningún contenido después de la etiqueta iframe. Por lo tanto, cualquier componente que esté adjunto a la página después del componente que contiene la etiqueta iframe no aparece en la página. ¿Alguna idea de por qué la etiqueta de cierre </iframe> se reemplaza por la etiqueta de cierre automático />?iframe etiqueta en el componente da página incompleta al publicar

+2

¿Estás seguro de que el "Convertir XML a HTML" TBB está presente en sus acciones predeterminada de fin? Normalmente, se supone que TBB convierte la notación XML a HTML que el navegador más antiguo prefiere. –

+1

Sí 'Convertir XML a HTML' TBB está presente en Acciones de finalización predeterminadas. –

Respuesta

6

Como Frank mencionó que podría utilizar el código XML Convertir a HTML TBB

(OR) 

También podría considerar la solución de Chris proporciona en este hilo. Creating anchor links in rich text fields with SDL Tridion 2011 SP1

Aplica xslt para la definición del campo de esquema. Mientras que la opción TBB se aplica al CT/PT completo dependiendo de dónde lo use, pero con XSLT puede usarlo en el nivel de campo y también obtiene el mismo formato cuando utiliza el CoreService para cualquier otro caso de uso.

+0

Su enlace fue útil. Actualmente estoy usando una etiqueta div vacía para suprimir este extraño comportamiento como este: ' ' –

+1

Su solución puede resolver su problema, pero según el estándar html no debe usar ninguna otra etiqueta en la etiqueta iframe. –

0

Creo que esto se debe al TBB "Clean Up". Me gustaría tratar de hacer un espacio "vacío" entre las etiquetas, algo como esto:

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

que debe mantener el margen de beneficio sin tocar y se mostrará el iframe con su etiqueta de cierre.

1

Le pregunté sobre este tema, y ​​Jamie Santos me ayudó con esta solución.

Ya estaba usando Convertir XML a HTML TBB, pero esto no funcionó porque la etiqueta de cierre ya estaba en la variable de salida.

Por lo tanto, la siguiente TBB utiliza un parámetro de esquema [Etiquetas], donde se pasa una lista de etiquetas (separadas por comas) que queremos cambiar la etiqueta de cierre auto (por ejemplo, />) con la etiqueta de cierre (por ejemplo)


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

Cuestiones relacionadas