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

