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

左手的ㄟ右手 2022-11-25 11:45 288阅读 0赞

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

  1. <!-- <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> -->

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

  1. //产品分类
  2. $pclass=Db::name('class')->select();//所有数据
  3. $items = array();
  4. foreach($pclass as $v){ //构建一个新数组,新数组的key是自己的主键id
  5. $items[$v['id']] = $v;
  6. }
  7. $tree = array();
  8. foreach($items as $k => $item){ //将已经重构的数组遍历,并判断当前数组元素的父级分类是否存在
  9. if(isset($items[$item['pid']])){
  10. $items[$item['pid']]['son'][] = &$items[$k];
  11. }else{
  12. $tree[] = &$items[$k];
  13. }
  14. }
  15. $mclassstr=$this->loopm($tree,0,'url/xxxx/xxx');//第三个参数,指点击分类跳转的页面链接
  16. $this->assign('mclassstr',$mclassstr);

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

  1. public function loopm($class,$level,$url){
  2. $str='';
  3. if($level==0){
  4. foreach($class as $item){
  5. $str.='<div class="sub_item"><div class="sub_title"><a href="'.$url.$item['id'].'.html" target="_blank">'.$item['cname'].'</a>';
  6. if(isset($item['son']) && $item['son']){
  7. $str.='<span class="icon_box"><img class="icon_tri" src="/mobile/img/home/h34.png" alt=""></span>';
  8. }
  9. $str.='</div>';
  10. if(isset($item['son']) && $item['son']){
  11. $str.=$this->loopm($item['son'],$level+1,$url);
  12. }
  13. $str.="</div>";
  14. }
  15. }
  16. else if($level==1){
  17. foreach($class as $item){
  18. $str.='<div class="sub_item">';
  19. $str.='<div class="sub_title"><a href=">'.$url.$item['id'].'.html" target="_blank">'.$item['cname'].'</a>';
  20. if(isset($item['son']) && $item['son']){
  21. $str.='<span class="icon_box"><img class="icon_tri" src="/mobile/img/home/h34.png" alt=""></span></div>';
  22. $str.=$this->loopm($item['son'],$level+1,$url);
  23. }else{
  24. $str.="</div>";
  25. }
  26. $str.='<div>';
  27. }
  28. }
  29. else{
  30. $kongge='';
  31. for($i=0;$i<$level;$i++){
  32. $kongge.=' ';
  33. }
  34. foreach($class as $item){
  35. $str.='<div class="sub_item">';
  36. $str.='<div class="sub_title"><a href="'.$url.$item['id'].'.html" target="_blank">'.$item['cname'].'</a>';
  37. if(isset($item['son']) && $item['son']){
  38. $str.='<span class="icon_box"><img class="icon_tri" src="/mobile/img/home/h34.png" alt=""></span></div>';
  39. $str.=$this->loopm($item['son'],$level+1,$url);
  40. }else{
  41. $str.="</div>";
  42. }
  43. $str.='</div>';
  44. }
  45. }
  46. return $str;
  47. }

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

  1. <div>
  2. {$mclassstr}
  3. </div>

发表评论

表情:
评论列表 (有 0 条评论,288人围观)

还没有评论,来说两句吧...

相关阅读