41

I was wondering if it was possible to assign an array to a variable within a Smarty template file? I have tried this

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

But when I print out the array it produces this:

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

How can I stop Smarty escaping the array values?

1
  • I have ran through this problem and came up with a solution earlier. The solution I came up with is here Commented Jul 5, 2012 at 2:48

5 Answers 5

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

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

From Smarty v.3 new syntax is available

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

see for more details : http://www.smarty.net/docs/en/language.syntax.variables.tpl

Sign up to request clarification or add additional context in comments.

3 Comments

If you use {php} then what is the meaning of using smarty? You should not use {php} inside template until it is the only option. @Jenski 's solution is perfect
Make sure NOT to put a comma (,) behind the last element. I was copying the array from php which was causing an syntax error.
It is also possible to assign variable manually to template vars: {php}$this->_tpl_vars['my_array'] = ['var1', 'var2'];{/php}
45

I just found another answer here that allows you to do this without the use of {php} tags (recommended by Smarty)

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

still open to more ideas though...

5 Comments

this method do not allow to assign associative array
+1 - thanks. This was exactly what we needed to address an issue in our hacky third-party CMS.
For version 3 of smarty see Mituha's answer.
This answers precisely what the question asks.
Is there a function I could use to get an empty array?
10

what about {$system=['freebsd','windows','macosx','linux']}?

1 Comment

0

its not right way to write a code with in smarty template file. you should create a array in php and then get the values from 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}

Comments

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

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.