变量中的Smarty TPL数组?

时间:2015-09-14 12:25:31

标签: php smarty

我的问题,Exapmle:

$a = array(); <- 1 mysql row
$id1 = 0; $id2 = 0;
$smarty->assign("a",$a);
$smarty->assign("id1",$id1);
$smarty->assign("id2",$id2);

PHP解决方案:

if($a['column_'.$id1.'_'.$id2]==0){echo"ok";}else{echo"no";}

Smarty TPL? 我试过了:

{if $a.column_'.$id1.'_'.$id2 == 0}{/if}

致命错误(: 我没有找到任何帮助,谢谢

2 个答案:

答案 0 :(得分:0)

为什么要在模板中编写业务逻辑?

开发Smarty模板,以便开发人员(业务逻辑)和设计人员(演示文稿)可以独立工作。

这样,业务逻辑和表示逻辑就会彼此分开。

总是更好地评估PHP中的所有表达式并将输出传递给模板。

在那里,可以打印变量。

答案 1 :(得分:0)

您的第一个尝试应该是尝试重新构建您的数据 - 无论是在PHP还是在Smarty中,使用复合键来表示数据的多个维度,这样会快速变得混乱。 PHP使得处理多维数组非常容易,因此不使用该功能是一种耻辱。

您可以循环遍历数据并使用以下内容生成新结构:

$better_structured_array = [];
foreach ( $awkward_raw_array as $old_key => $item_value ) {
    list($first_key, $second_key, $third_key) = explode('_', $old_key);
    $better_structured_array[$first_key][$second_key][$third_key] = $item_value;
}

那么你的Smarty会很容易:

{if $a.column[$id1][$id2] == 0}{/if}

如果由于某种原因你真的不能这样做,那就是首先将密钥构建到变量中,然后将其用作密钥访问:

{assign name=ugly_array_key value='column_'|cat:$id1|cat:'_'|cat:$id2}
{if $a[$ugly_array_key] == 0}{/if}