2010-02-11 5 views
32

Mi chiedevo se fosse possibile assegnare un array a una variabile all'interno di un file di modello Smarty? Ho provato questoCome assegnare un array all'interno di un file modello smarty?

{assign var='file' value = array('dir','doc','exe')} 

Ma quando stampo fuori la matrice che produce questo:

array(\'dir\',\'doc\',\'exe\') 

Come posso smettere di Smarty sfuggire i valori di matrice?

Grazie in anticipo

+0

Ho eseguito attraverso questo problema e si avvicinò con una soluzione in precedenza. La soluzione che ho trovato è [qui] (http://stackoverflow.com/questions/11336840/shorten-smarty-if-statements/11337280) – Subash

risposta

44
{php} 
    $this->assign("array", array('dir','doc','exe')); 
{/php} 

{foreach from=$array item=item} 
    {$item} 
{/foreach} 

Da Smarty v.3 nuova sintassi è disponibile

{$array = ['item1','item2',$item3]} 

vedere per ulteriori dettagli: http://www.smarty.net/docs/en/language.syntax.variables.tpl

+1

Se si utilizza {php}, qual è il significato dell'utilizzo di smarty? Non dovresti usare {php} nel modello finché non è l'unica opzione. La soluzione di @Jenski è perfetta –

+1

Assicurati di NON mettere una virgola (,) dietro l'ultimo elemento. Stavo copiando l'array da php che stava causando un errore di sintassi. – rambii

42

Ho appena trovato un'altra risposta here che permette per farlo senza usare {php} tags (consigliato da Smarty)

{assign var='icon' value=','|explode:"dir,doc,exe"} 

ancora aperto a più idee anche se ...

+0

questo metodo non consente di assegnare array associativi – Kirzilla

+0

+1 - grazie. Questo era esattamente ciò di cui avevamo bisogno per risolvere un problema nel nostro CMS di terze parti hacky. –

+0

Per la versione 3 di smarty vedere la risposta di Mituha. – Andy

8

che dire {$system=['freebsd','windows','macosx','linux']}?

+1

Funziona in Smarty v3: http://www.smarty.net/docs/en/language.syntax.variables.tpl – Andy

-1

non è il modo giusto per scrivere un codice con il file modello smarty. dovresti creare una matrice in php e quindi ottenere i valori da smarty.

This is the right way to create a standard development code. like. 

PHP:

public function arrSam(){ 
    $colors = array(0 => '#1f1f1f', 1 => '#696969', 2 => '#878787', 3 => '#b4b4b4', 4 => '#d2d2d2', 5 => '#f0f0f0', 6 => '#ffffff'); 
    $smarty->assign('colors', $colors); 
} 

Smarty:

{assign var=colors value=$smarty->arrSam()} 
{$colors|print_r} 
+2

Spiegare perché non è giusto. –

0
$smarty->assign("lat",$lat); 

{foreach $lat as $latlongval} 
    {assign var="myArray" value=","|explode:$latlongval} 
    {$myArray['0']} 
    {$myArray['1']} 
{/foreach}