我的问题,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}
致命错误(: 我没有找到任何帮助,谢谢
答案 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}