灵动标签的嵌套使用
灵动标签是帝国cms 的大杀器
方便,强大,高效。 小遗憾是不能嵌套
曾经,管理员给出了姑息的嵌套用法: http://bbs.phome.net/showthread-13-146819-0.html
高效是无疑的,但是基本是源代码了
谈不上方便了。2016年正月 本宝宝猴年初六发威,修改帝国cms的一个函数,实现灵动的嵌套
干货:
修改 e/class/functions.php
函数:DoRepEcmsLoopBq 修改为
//替换灵动标签
function DoRepEcmsLoopBq($temp){
$yzz="/[e:loop(d*)={(.+?)}](.+?)[/e:loop1]/is";
$xzz="<?php
$bqno1=0;
$ecms_bq_sql1=sys_ReturnEcmsLoopBq(2);
if($ecms_bq_sql1){
while($bqr1=$empire->fetch($ecms_bq_sql1)){
$bqsr1=sys_ReturnEcmsLoopStext($bqr1);
$bqno1++;
?>3<?php
}
}
?>";
while(preg_match($yzz,$temp)){
$temp=preg_replace($yzz,$xzz,$temp);
}
$temp=DoRepEcmsIndexLoopBq($temp);
return $temp;
}
//对索引灵动函数,我们也可以做类似的处理,这样索引灵动标签就可以嵌套了。
//替换索引灵动标签
function DoRepEcmsIndexLoopBq($temp){
$yzz="/[e:indexloop(d*)={(.+?)}](.+?)[/e:indexloop1]/is";
$xzz="<?php
$bqno1=0;
$ecms_bq_sql1=sys_ReturnEcmsIndexLoopBq(2);
if($ecms_bq_sql1){
while($indexbqr1=$empire->fetch($ecms_bq_sql1)){
if(empty($class_r[$indexbqr1['classid']]['tbname'])){continue;}
$bqr1=$empire->fetch1("select * from {$dbtbpre}ecms_".$class_r[$indexbqr1['classid']]['tbname']." where id='$indexbqr1[id]'");
$bqsr1=sys_ReturnEcmsLoopStext($bqr1);
$bqno1++;
?>3<?php
}
}
?>";
while(preg_match($yzz,$temp)){
$temp=preg_replace($yzz,$xzz,$temp);
}
return $temp;
}
这样处理后,嵌套方法见下边,嵌套的逻辑正确性写代码的负责。
[e:loop={...}]
...
// $bqr[...],$bqno;
[e:loop2={...}]
//$bqr2[...],$bqno2;
[e:loop3={...}]
//$bqr3[...],$bqno3;
[/e:loop3] ...
[/e:loop2] ...
[/e:loop]