php实现无限级分类及分类数据渲染

php实现无限级分类数据渲染
下面试一个大概样式,可以无限级分下去;大家可以根据自己的需求编写样式,原理都是一样的
在这里插入图片描述
先把想要的样式写出来调试好,进行注释,方便后面php直接渲染数据结构

			<!-- <div class="sub_item">
						<div class="sub_title">
							<a href="">顶级分类1</a>
							<span class="icon_box close">
								<img src="__CDN__/mobile/img/home/h34.png" class="icon_tri" title="下拉" title="下拉">
							</span>
						</div>
                        <div class="sub_item">
							<div class="sub_title">
								<a href="">二级分类1</a>
								<span class="icon_box">
									<img src="__CDN__/mobile/img/home/h34.png" class="icon_tri" title="下拉" title="下拉">
								</span>
							</div>
                            <div class="sub_item">
								<div class="sub_title">
									 <a href="">三级分类1</a>
								</div>
                            </div>
                        </div>
                        <div class="sub_item">
							<div class="sub_title">
								<a href="">二级分类2</a>
							</div>
                           
                        </div>
                    </div>
                    <div class="sub_item">
						<div class="sub_title">
							<a href="">顶级分类2</a>
							<span class="icon_box">
								<img src="__CDN__/mobile/img/home/h34.png" class="icon_tri" title="下拉" title="下拉">
							</span>
						</div>
			</div> -->

然后获取所有分类数据数组,进行重构

 		//产品分类
        $pclass=Db::name('class')->select();//所有数据
        $items = array();
        foreach($pclass as $v){
    
    //构建一个新数组,新数组的key是自己的主键id
            $items[$v['id']] = $v;
        }
        $tree = array();
        foreach($items as $k => $item){
    
    //将已经重构的数组遍历,并判断当前数组元素的父级分类是否存在
            if(isset($items[$item['pid']])){
    
    
                $items[$item['pid']]['son'][] = &$items[$k];

            }else{
    
    
                $tree[] = &$items[$k];
            }
        }
	$mclassstr=$this->loopm($tree,0,'url/xxxx/xxx');//第三个参数,指点击分类跳转的页面链接
	$this->assign('mclassstr',$mclassstr);

接下来将前面写好的分类结构进行循环渲染

public function loopm($class,$level,$url){
    
    
        $str='';
        if($level==0){
    
    
            foreach($class as $item){
    
    
                $str.='<div class="sub_item"><div class="sub_title"><a href="'.$url.$item['id'].'.html" target="_blank">'.$item['cname'].'</a>';
                if(isset($item['son']) && $item['son']){
    
    
                    $str.='<span class="icon_box"><img class="icon_tri" src="/mobile/img/home/h34.png" alt=""></span>';
                }
                $str.='</div>';
                if(isset($item['son']) && $item['son']){
    
    
                    $str.=$this->loopm($item['son'],$level+1,$url);
                }
				$str.="</div>";
            }
			
        }
        else if($level==1){
    
    
            foreach($class as $item){
    
    
				$str.='<div class="sub_item">';
                $str.='<div class="sub_title"><a href=">'.$url.$item['id'].'.html" target="_blank">'.$item['cname'].'</a>';
                if(isset($item['son']) && $item['son']){
    
    
                    $str.='<span class="icon_box"><img class="icon_tri" src="/mobile/img/home/h34.png" alt=""></span></div>';
                    $str.=$this->loopm($item['son'],$level+1,$url);
                }else{
    
    
					$str.="</div>";
				}
                $str.='<div>';
            }
        }
        else{
    
    
            $kongge='';
            for($i=0;$i<$level;$i++){
    
    
                $kongge.='&nbsp;';
            }
            foreach($class as $item){
    
    
				$str.='<div class="sub_item">';
                $str.='<div class="sub_title"><a href="'.$url.$item['id'].'.html" target="_blank">'.$item['cname'].'</a>';
                if(isset($item['son']) && $item['son']){
    
    
                    $str.='<span class="icon_box"><img class="icon_tri" src="/mobile/img/home/h34.png" alt=""></span></div>';
                    $str.=$this->loopm($item['son'],$level+1,$url);
                }else{
    
    
					$str.="</div>";
				}
                $str.='</div>';
            }
        }
        return $str;
    }

最后在html页面需要渲染数据的地方,进行渲染

<div>
	{$mclassstr}
</div>

猜你喜欢

转载自blog.csdn.net/qq_36129701/article/details/107882289