Smarty: Respetar los "retorno de carro" de un texto de nuestra base de datos

Caso: levantamos un campo de texto de nuestra base de datos que tiene un formato con retornos de carro, es decir, tiene escritos tres párrafos separados con un [Enter].


Si nosotros tomamos ese campo, tal cual, y lo incluimos en nuestra plantilla html, nuestro texto quedará todo junto sin saltos.

Si visualizamos el código que estamos viendo desde nuestro navegador, el texto aparecerá con los "saltos de carro" correctos.


¿Por qué sucede esto?

Bueno, en HTML solo se toma en cuenta *un solo espacio*, los restantes no son tenidos en cuenta, ni tampoco los comandos que representan "retorno de carro" (\n) o los tabuladores (\t), etcétera.

¿Cómo podemos solucionarlo con Smarty?


Una expresión regular que toma el contenido "en bruto" y busca los comandos "\n" y los sustituye con un "salto de línea" en formato HTML.


{$elemento.texto_noticia|regex_replace:"/[\n]/":"<br>"}

Resultado: si tiene un solo "retorno" (\n) se coloca un "break", si tiene dos, agrega dos "break", dando el efecto de separación con linea en blanco.


De la misma forma, podríamos hacer con los "\t", y agregándoles, por ejemplo, una serie de espacios en formato html:

Simple, sencillo, directo ;-)

PD: estoy casi seguro que esta "estrategia" está escrita en algún lado, tal vez en el manual del Smarty, o en un artículo (porque vino demasiado rápido a mi cerebro ;-).

3 comentarios:

Anónimo dijo...

también puedes usar nl2br que es menos críptica que una expresión regular. La forma sería:
{$TextoMostrar|nl2br} esto hace lo mismo que la función de php http://www.php.net/manual/es/function.nl2br.php

Enrique Place dijo...

Sí, se me pasó completamente, gracias! ;-)

Borlam dijo...

No entiendo muy bien como realizar esto, puede ponerme la linea completa para asignar el texto con los saltos de carro formateados a br en una variable. Gracias y un saludo.

Entradas populares