有没有这样一种需求,当我们使用PHPCMS建立多级站点时,每个大的分类下面又有许多小的分类,如果想要调用第一大分类下面和第二大分类下面的文章同时出来的时候,该怎么调用呢。如果只是第一大分类和第二大分类,下面没有包含小的分类的时候,哪么调用就很简单了,我们直接使用GET就可以调用出来了,使用 PHP 的 SQL 中 in 功能。如下代码:
123456 {pc:get sql="SELECT * FROM v9_news WHERE catid in(1,3,5) ORDE R BY id DESC" num="10"} {loop $data $v}
{$v[title]} {/loop} {/pc}
上面调用了1,3,5分类的文章,这个是比较容易理解的,如果遇到上面提到的问题,大的分类下面又存在小的分类,那么利用上面的方法就没有办法调出子分类的内容了,所以我们要做的是如果直接分类那么直接显示分类ID,如果有小的分类,那么就显示所有的子分类ID,最后再把他们用逗号连接起来,同样可以实现相同的效果,看下面的代码:
1234567891011121314 {pc:get sql="SELECT * FROM v9_news WHERE catid in($finalcatid) ORD ER BY id DESC" num="14"} {loop $data $v}
{$v[title]} {/loop} {/pc}
这里先了 3 个分类的ID,其中,23,24没有子分类,而19有许多子分类,$CATEGORYS[$row][arrchildid] 这一句很重要,如果没有子分类则直接显示该分类的ID,如果有子分类,就会以1,2,3,4,5这种格式将所有的子分类都显示出来,数组中有3个值,所以foreach后会形成3个数组,分别是大类23,24,以及19,43,44,其中,43,44均为19大类下面的子分类ID。
把这循环的三组数组赋给一个新的数组,然后在循环外用逗号切割成字符串,拼起来就是所有大类与子类了,如23,24,19,43,44这样,做到这里就实现了刚开始提出的问题。
另外一种方法调用代码如下:
1234 {loop subcat(15) $k $v} {php $subcatid[] = $k;} {/loop} {php $subcatid = implode(',', $subcatid);}
然后在读取SQL的条件中这样写 WHERE catid in($finalcatid)
本文来源于夏日博客