我的问题,示例:
$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}
致命错误(:我没有找到任何帮助,谢谢
首先应该尝试重构数据——无论是在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}
为什么要在模板中编写业务逻辑?
Smarty模板的开发使开发人员(业务逻辑)和设计人员(表示)可以独立工作。
使业务逻辑和表示逻辑彼此分开。
最好在PHP中计算所有表达式并将输出传递给模板。