
php 写模板引擎时 写到替换标签时不知如何替换嵌套循环标签。
如题,单个foreach()能替换了。代码如下:这个就是替换模板里标签的代码。问题来了,单个能替换了,但不知如何替换模板中有嵌套循环的标签,如以下标签:<foreachi...
如题,单个foreach()能替换了。代码如下:
这个就是替换模板里标签的代码。问题来了,单个能替换了,但不知如何替换模板中有嵌套循环的标签,如以下标签:
<foreach item=$v from=$user>
<foreach item=$v2 from=$v>
........
</foreach>
</foreach>
因为这是正则表达式。代码会把合规则的东西一次过替换。这样就出问题了,因为第一个from是来自模板引擎assign过来的值。但第二个是来自上一个循环的值 $v。
如果是正则,系统就会一次替换,把里面的循环中的 from也从assign值里找。这是明显找不到的。
求高手支招。 展开
这个就是替换模板里标签的代码。问题来了,单个能替换了,但不知如何替换模板中有嵌套循环的标签,如以下标签:
<foreach item=$v from=$user>
<foreach item=$v2 from=$v>
........
</foreach>
</foreach>
因为这是正则表达式。代码会把合规则的东西一次过替换。这样就出问题了,因为第一个from是来自模板引擎assign过来的值。但第二个是来自上一个循环的值 $v。
如果是正则,系统就会一次替换,把里面的循环中的 from也从assign值里找。这是明显找不到的。
求高手支招。 展开
展开全部
不理解什么是“要从assign里面找”呢?一般来说$view->assign('user', $user)的话,模板这边应该是直接使用$user的,而不是$assign['user'],这样就不存在你所说的问题了啊。
追答
从php向模板传的变量应该是一个数组,但是在模板应用变量前应该将数组转换为变量,而不是从原始的数组中寻找,明白了?
例如,php传递了数组 $assign = array('user' => array(array('name'='u1')));
那么在模板使用该数组前可以这样做,
$vars = '';
foreach ($assign as $key => $value) $vars .= '$' . $key . ',';
//现在$vars == '$user'
if (! empty($vars)) {
$vars = substr($vars, 0, -1);
eval("list({$vars})=$assign;");
}
这样,$user这个变量可以在模板中直接使用了。
经过以上的处理
就都不必去assign值里面找了,从而解决了你的问题,明白了?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询