变量内的 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";}
聪明的TPL?
我试过了:
{if $a.column_'.$id1.'_'.$id2 == 0}{/if}
致命错误(:
我找不到任何帮助,谢谢
为什么要在模板中编写业务逻辑?
开发了 Smarty 模板,以便开发人员(业务逻辑)和设计人员(表示)可以独立工作。
以便业务逻辑和表示逻辑彼此分开。
最好在 PHP 中评估所有表达式并将输出传递给模板。
在那里,可以打印变量。
你的第一个办法应该是尝试重组你的数据——无论是在 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}
我的问题,示例:
$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";}
聪明的TPL? 我试过了:
{if $a.column_'.$id1.'_'.$id2 == 0}{/if}
致命错误(: 我找不到任何帮助,谢谢
为什么要在模板中编写业务逻辑?
开发了 Smarty 模板,以便开发人员(业务逻辑)和设计人员(表示)可以独立工作。
以便业务逻辑和表示逻辑彼此分开。
最好在 PHP 中评估所有表达式并将输出传递给模板。
在那里,可以打印变量。
你的第一个办法应该是尝试重组你的数据——无论是在 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}