2012-01-19 9 views

Respuesta

23

Smarty3 que permite a {$var = ['foo' => 'bar', 'sub' => [1, 2, 3]]} y {$var.foo = 'other'}

si no bastan esas opciones, escribir una plugin function.

+0

He tratado este consejo y funciona. Esta característica no parece estar documentada en la documentación de Smarty, lo que hace que este consejo sea aún más valioso para mí. –

10

En el pasado, se han utilizado dos enfoques - un mal y un sucio uno - a asignar rápidamente una matriz dentro de un TPL:

{* Am I evil? *} 
{php} 
    $array = array("cat", "dog", "rabbit"); 
    $this->assign("myArray", $array); 
{/php} 

{* Am I dirty? *} 
{assign var='myArray' value=','|explode:"cat,dog,rabbit"} 

Ambos resultan en la matriz disponible dentro de la plantilla para crear un simple lazo. De todos modos, siempre terminé cambiando mi código de esta manera, así que no necesitaba estas cosas en absoluto.

+0

No me gusta el primer enfoque, debido al código php "en línea". La segunda solución es un poco complicada, pero aún es válida sin ningún tipo de piratería. Votado! –

1

Desde el punto de vista de MVC, la parte de Vista es solo responsable de mostrar los datos. Le recomiendo que reconsidere la aplicación de tal manera que le permita procesar los datos en el Modelo y pasarlos para que se muestren solo en la Vista.

+0

¿Y cómo procesa una tabla (con filas) en un Modelo para que no haya ninguna marca HTML? Aún debe pasar toda la matriz de datos y crear una tabla dinámica desde la vista. – Andrew

+0

@Andrew ¿Me estoy perdiendo algo en mi respuesta? No dije que la vista tiene que ser estática, solo señalé que todo el procesamiento de datos se debe hacer en el modelo y pasar a la vista para que se muestre. – Catalin

+0

Catalin> Sí, entiendo lo que quieres decir. Solo quería saber si hay una forma de evitar el bucle en la plantilla. Y AFAIK no hay ningún ... – Andrew

5

En realidad es muy simple:

{assign 'myArray' ['cat', 'dog', 'rabbit']} 
+0

¿Funciona con la versión 2? –

Cuestiones relacionadas