smarty v2 loop else不拾取变量

时间:2014-06-20 19:10:40

标签: smarty

为什么{elseif}部分中的变量没有显示?

{section name="images" start="1" loop=$smarty.const.MAX_EXTRA_IMAGES+1}
{assign var="ind" value=$smarty.section.images.index}
{if $output.prodRow.images[$ind].image_nr}
<li>A:{$output.prodRow.images[$ind].cover_img}      // returns foo
{elseif !$output.prodRow.images[$ind].image_nr}
<li>B:{$output.prodRow.images[$ind].cover_img}  // returns nothing
{/if}
</div>
{/section}

1 个答案:

答案 0 :(得分:0)

我不知道你的意思&#34;什么也不回报&#34;但它按预期工作,因为如果没有设置image_nr,你可能没有设置任何cover_img:

在PHP文件中,您有:

$output['prodRow']['images'][1]['image_nr'] = 1;
$output['prodRow']['images'][1]['cover_img'] = 'foo';

$smarty->assign('output', $output);

error_reporting(0);
$smarty->display('elseif.tpl');

在模板文件中,您有:

{section name="images" start="1" loop=5}
{assign var=ind value=$smarty.section.images.index}
{if $output.prodRow.images[$ind].image_nr}
<li>A:{$output.prodRow.images[$ind].cover_img}      
{elseif !$output.prodRow.images[$ind].image_nr}
<li>B:{$output.prodRow.images[$ind].cover_img}  
{/if}
{/section}

输出结果为:

A:foo
B:
B:
B: 

正如所料。

当你进入PHP文件时:

$output['prodRow']['images'][1]['image_nr'] = 1;
$output['prodRow']['images'][1]['cover_img'] = 'foo';
$output['prodRow']['images'][2]['cover_img'] = 'foo2';

$smarty->assign('output', $output);

error_reporting(0);
$smarty->display('elseif.tpl');

并且不要更改模板文件中的任何内容,输出为:

A:foo
B:foo2
B:
B:

正如所料。

回答你的问题,如果你的PHP脚本中没有设置image_nr,你可能没有设置cover_img。