最近忙于项目,比较少分享技术文档,今天CMSYOU在这里分享最近用到的一个数据调用方式:Phpcms V9数据调用循环嵌套调用。
Phpcms V9默认调用数据列表的方式:
{pc:content action="lists" catid="$catid" num="25" order="id DESC" page="$page"}<ul class="list lh24 f14">{loop $data $r}<li><span class="rt">{date('Y-m-d H:i:s',$r[inputtime])}</span>路<a href="{$r[url]}" target="_blank"{title_style($r[style])}>{$r[title]}</a></li>{if $n%5==0}<li class="bk20 hr"></li>{/if}{/loop}</ul><div id="pages" class="text-c">{$pages}</div>{/pc}
可以看出是一层loop循环,如果需要多层循环,那么就会用到循环嵌套,具体方法:
1、修改/phpcms/lib/classes/template_cache.class.php文件,在template_parse 方法(大约第69行),加入如下代码:
$str = preg_replace ("/\{loop(\S+)\s+(\S+)\s+(\S+)\}/","<?php \$n\\1=1;if(is_array(\\2)) foreach(\\2 AS \\3) { ?>", $str );$str = preg_replace ("/\{loop(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\}/","<?php \$n\\1=1; if(is_array(\\2)) foreach(\\2 AS \\3 => \\4) { ?>", $str );$str = preg_replace ("/\{\/loop(\S+)\}/","<?php \$n\\1++;}unset(\$n\\1); ?>", $str );
这样避免多次循环在模板编译的时候出错。
2、前台模板调用:
{pc:content action="category" catid="0" num="25" order="listorder ASC"}{loop $data $r}<dd> <a href="{$r[url]}">{$r[catname]}</a><ul>{pc:content action="category" catid="$r[catid]" num="25" order="listorder ASC" return="data2"}{loop2 $data2 $v}<li><a href="{$v[url]}">{$v[catname]}</a></li>{/loop2}{/pc}</ul></dd>{/loop}{/pc}
注:在循环中注意return="自定义返回值"的使用,避免数据冲突。
欢迎大家收听CMSYOU官方微博,看完CMSYOU思优团队的文章有疑问,那就在下面评论留言吧!
点击加载更多