设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 公司 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP无限分类树形类的深入解析

发布时间:2022-07-12 12:51 所属栏目:121 来源:互联网
导读:PHP无限分类,Google一下就能找到很多相关资料,思路比较拉风的,也是用得比较多的就是分类表至少有id,pid,name三个字段,id自增表分类,pid为父分类,name为分类名,这样就构成了一棵树,如下,算是我查询分类表得到的结果集。 复制代码 代码如下:www.CuoXI
  PHP无限分类,Google一下就能找到很多相关资料,思路比较拉风的,也是用得比较多的就是分类表至少有id,pid,name三个字段,id自增表分类,pid为父分类,name为分类名,这样就构成了一棵树,如下,算是我查询分类表得到的结果集。
 
  复制代码 代码如下:www.CuoXIn.com
 
  <?php
 
  //模拟PHP无限分类查询结果
 
  return array(
 
  array(
 
  'id'=>1,
 
  'pid'=>0,
 
  'name'=>'主页'
 
  ),
 
  array(
 
  'id'=>2,
 
  'pid'=>0,
 
  'name'=>'新闻'
 
  ),
 
  array(
 
  'id'=>3,
 
  'pid'=>0,
 
  'name'=>'媒体'
 
  ),
 
  array(
 
  'id'=>7,
 
  'pid'=>2,
 
  'name'=>'海外新闻'
 
  ),
 
  array(
 
  'id'=>8,
 
  'pid'=>6,
 
  'name'=>'州官新闻'
 
  ),
 
  array(
 
  'id'=>9,
 
  'pid'=>3,
 
  'name'=>'音乐'
 
  ),
 
  array(
 
  'id'=>10,
 
  'pid'=>3,
 
  'name'=>'电影'
 
  ),
 
  array(
 
  'id'=>11,
 
  'pid'=>3,
 
  'name'=>'小说'
 
  ),
 
  array(
 
  'id'=>12,
 
  'pid'=>9,
 
  'name'=>'铃声'
 
  ),
 
  array(
 
  'id'=>13,
 
  'pid'=>9,
 
  'name'=>'流行音乐'
 
  ),
 
  array(
 
  'id'=>14,
 
  'pid'=>9,
 
  'name'=>'古典音乐'
 
  ),
 
  array(
 
  'id'=>15,
 
  'pid'=>12,
 
  'name'=>'热门铃声'
 
  ),
 
  array(
 
  'id'=>16,
 
  'pid'=>12,
 
  'name'=>'搞笑铃声'
 
  ),
 
  array(
 
  'id'=>17,
 
  'pid'=>12,
 
  'name'=>'MP3铃声'
 
  ),
 
  array(
 
  'id'=>18,
 
  'pid'=>17,
 
  'name'=>'128K'
 
  ),
 
  array(
 
  'id'=>19,
 
  'pid'=>8,
 
  'name'=>'娱乐新闻'
 
  ),
 
  array(
 
  'id'=>20,
 
  'pid'=>11,
 
  'name'=>'穿越类'
 
  ),
 
  array(
 
  'id'=>21,
 
  'pid'=>11,
 
  'name'=>'武侠类'
 
  ),
 
  );
 
  ?>
 
  拉风归拉风,但是那些文章提供的无限分类的类相关操作有点挫,直接把对数据库操作也封装进去了。也就是别人要用你这个类,还要跟你建一样的表,真TM恶心。由于项目要用到,所以自己写了一个PHP无限分类的类(也称树形类),没有数据库的操作,只需要实例化的时候传进去结果集,也就是树形数组。再执行leaf方法或navi方法即可得到想要的结果,下面请看源码,看完之后奉上smarty模板引擎的相应的模板递归方法。
 
  在smarty模板中这样递归:
 
  复制代码 代码如下:www.CuoXIn.com
 
  <!--导航-->
 
  <div id="navigator">
 
  <{foreach $nav as $n}>
 
  <{if $n@iteration != $n@last}>
 
  <{$n.name}> ->
 
  <{else}>
 
  <{$n.name}>
 
  <{/if}>
 
  <{/foreach}>
 
  </div>
 
  <!--树形菜单-->
 
  <div id="menu">
 
  <{function name=menu}>
 
  <ul>
 
  <{foreach $data as $entry}>
 
  <li>
 
  <span><{$entry.name}></span> <{*注意字段要改成自己的字段哦*}>
 
  <{if isset($entry.child)}>
 
  <{call name=menu data=$entry.child}>
 
  <{/if}>
 
  </li>
 
  <{/foreach}>
 
  </ul>
 
  <{/function}>
 
  <{call name=menu data=$arr}> <{*注意在这里$arr才是模板变量*}>
 
  </div>
 
  当然,你也可以更改递归方法,用你想的标签不受拘束。HTML+PHP混编的递归方法这里就不贴了,我也懒得写,最讨厌混编,看着恶心,在这里推荐一下jake前辈的SpeedPHP框架,由于默认的引擎是smarty,我的这个PHP无限分类完全兼容SP框架。同样的,jquery的treeview插件和下拉菜单插件也完美支持。
 
  对了,建议使用Smarty强大的缓存功能,缓存才是王道。
 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读