今天在这里分享最近用到的一个数据调用方式: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="自定义返回值"的使用,避免数据冲突。