Smarty TPL数组内部变量


Smarty TPL array inside variable?

我的问题,示例:

$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中计算所有表达式并将输出传递给模板。