在帝国cms站点的开发过程中,有时候需要判断栏目有没有下级栏目,如果有子栏目,则展示下拉框,否则不出现下拉框。

帝国cms怎样判断一个栏目有没有子栏目?(父栏目换位判断原创方案)
网上流传的教程是判断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怎样判断一个栏目有没有子栏目?(父栏目换位判断原创方案)
在帝国cms站点的开发过程中,有时候需要判断栏目有没有下级栏目,如果有子栏目,则展示下拉框,否则不出现下拉框。

帝国cms怎样判断一个栏目有没有子栏目?(父栏目换位判断原创方案)
网上流传的教程是判断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怎样判断一个栏目有没有子栏目?(父栏目换位判断原创方案)