网上流传的教程是判断islast方案以及非islast方案(方案名提炼简称),概要与功能分析如下。
islast方案
islast方案只能判断这个栏目下面有没有最终栏目,如果子栏目不是终极栏目,则数据库不会存储栏目id到sonclass字段,判断必然失效。因此,后来有高手提出了非islast判断方案。非islast方案
从搜索结果来看,非islast方案流传也比较广,但此方案需要查询并存储为数组,然后转为字符串,在这个基础上再用strstr函数进行比较,不仅繁琐难懂,且消耗服务器性能。因此我们研究出了第三种方案。父栏目换位判断方案
我们的需求是判断当前栏目是否有子栏目,如果子栏目无法取得,那么我们就换个思路:取得其他栏目的父栏目。如果其他栏目的父栏目等于当前循环的栏目id,则这个id的栏目自然有子栏目。理解稍绕,但实现并不绕,请看下方源码。注:考虑到有此需求,并想要实现的的用户具备一定的代码基础,此处只粘贴核心源码与大意。
<?
$re=$empire->fetch1("select classid from {$dbtbpre}enewsclass where bclassid=$bqr[classid] limit 1");
if($re){
?>
//此处的循环省略
<div class="drop-down"><ul><li><a href="#">子栏目名</a></li></ul></div>
//此处的循环结束符省略
<?}else{?>
<?}?>
核心思路如下
1、循环全部父栏目为0的栏目,而后取得全部一级栏目。2、获取一条所有父栏目为上方栏目id的栏目。
3、如果获取到,则当前栏目必然有子栏目,进入下一级循环;如果获取结果为空,则不进行任何操作。
这样,我们就通过最简洁的方案实现了判断一个栏目有没有子栏目的功能。
附注:
网上的教程多,直接复制粘贴确实省事也省心,但实实在在的理解并举一反三,最终才能变成自己的技能。本文转自下载鸥 帝国cms怎样判断一个栏目有没有子栏目?(父栏目换位判断原创方案)