Cambio en comportamiento de por defecto de Output de datos

7 views
Skip to first unread message

Sergio Ambel Santoyo

unread,
Feb 15, 2013, 7:49:06 AM2/15/13
to sifophp
Hola,

acabo de hacer push a desarrollo de unos cambios de SIFO que afectarán a cómo trabajáis con las vistas en vuestras instancias.

A partir de la nueva revisión podréis ver en la instancia common un nuevo config que se llama view.config. En ese archivo podréis configurar el comportamiento que queréis que haga smarty.

En ese documento he añadido un nuevo flag "escape_html". Aunque por defecto viene a false para mantener la compatibilidad con vuestros proyectos, os recomiendo que lo pongáis a true.

Este flag hace que Smarty escape todas las variables html antes de imprimirlas menos las que tengan el parámetro 'nofilter' (http://www.smarty.net/docs/en/variable.escape.html.tpl).

Además he modificado los plugins tblock y fill para que, cuando el nuevo flag esté activo, escapen las variables que se les pasan. Si queréis evitarlo hay que añadir el parámetro "escapevar=no".


Tras migrar un proyecto al nuevo comportamiento pienso que os puede ir bien una "receta" para evitar los problemas que me he podido econtrar.

La receta:
Al activar ese  comportamiento debéis tener en cuenta estas cosas:

  • Añadir 'nofilter' a todas las impresiones de módulos. Para ello podéis hacer un replace en vuestro id usando la siguiente cadena de búsqueda (regexp)
Cambiar
\{(\s*\$modules\.[^\}\s]+)\s*\}
por 
\{$1 nofilter\}

  • En los bloques {t} queda en desuso el parámetro escape=no que escapaba todo el literal. Ahora sólo permite escapar/o no las variables que se usen en él. Para que no escape por defecto se debe añadir escapevar=no  lo de escape=no ahora ni pincha ni corta. Si lo dejáis no afectará en nada. Mejor borrarlo por higiene. Tened en cuenta este nuevo parámetro para las variables que esperamos que devuelvan un link o un js.
  • El plugin fill, de generación de url's, escapa las variables. No se me ocurre un caso en que no queramos que se haga pero, si fuera así, también podéis usar "escape=no".
  • Cuando hagáis cambios, muchas veces tendréis que limpiar el directorio templates/_smarty/compile  para que funcion (rm -rf).

El cambio lo he subido a devel para poder revisarlo con calma y adaptar los proyectos.


Salud,


-Sergio



Reply all
Reply to author
Forward
0 new messages