首页 > php教程 > php手册 > 正文

基于THINKPHP3.0无限级分类

php中文网
发布: 2016-06-07 11:45:40
原创
1264人浏览过

无限极分类在做项目中经常会用到,无限极分类的实现方法也多种实现形式,下面我分享一个基于thinkphp3.0的无极限分类,同时也支持普通传值的无极限分类。说明该类很久以前我在互联网上找到是,原编写者信息没有,这里我只是在原有的基础上做了些修改和格式化。
分类表需包含3个基本字段:cid,fid,name 即:分类cid,父级fid,分类名称。
表结构:CREATE TABLE `think_category` (<br>   `cid` int(11) NOT NULL AUTO_INCREMENT,<br>   `fid` int(11) DEFAULT NULL,<br>   `name` varchar(30) DEFAULT NULL<br>   PRIMARY KEY (`cid`)<br> ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;有两种使用方法:
第一种是基于THINKPHP3.0的使用:下载后将Category.class.php放到当前项目的ORG目录下(其他的目录也可只要能正常引用) import("@.ORG.Category");<br> $cat = new Category('Category', array('cid', 'fid', 'name', 'fullname'));<br> $s = $cat-&gt;getList();               //获取分类结构<br> $s = $cat-&gt;getList('', 1);          //获取fid=1的子分类结构<br> $s = $cat-&gt;getList($condition, 1);  //$condition为查询条件,获取fid=1的子分类结构<br> $s = $cat-&gt;getPath(3);              //获取分类id=3的路径<br> $data = array("fid" =&gt; 0, "name" =&gt; "新分类名称");<br> $s = $cat-&gt;add($data);              //添加分类,$data需要包含上级分类fid<br> $data = array("cid" =&gt; 2, "name" =&gt; "修改后分类名称");<br> $s = $cat-&gt;edit($data);             //修改分类,$data需要包含分类ID<br> $s = $cat-&gt;del(10);                 //删除分类id=10的分类第二种使用方法不需要使用TP的支持,但是数据结构需一样。

分类类文件Category.class.php内容:<?php <br /><br> /**<br>   +------------------------------------------------------------------------------<br>  * 分类管理<br>   +------------------------------------------------------------------------------<br>  */<br> class Category {<br><br>     private $model;                                                           //分类的数据表模型<br>     private $rawList = array();                                              //原始的分类数据<br>     private $formatList = array();                                           //格式化后的分类<br>     private $error = "";                                                      //错误信息<br>     private $icon = array('&amp;nbsp&amp;nbsp│', '&amp;nbsp&amp;nbsp├ ', '&amp;nbsp&amp;nbsp└ ');  //格式化的字符<br>     private $fields = array();                                               //字段映射,分类id,上级分类fid,分类名称name,格式化后分类名称fullname<br><br>     /**<br>       +----------------------------------------------------------<br>      * 构造函数,对象初始化<br>       +----------------------------------------------------------<br>      * @param array,object  $model      数组或对象,基于TP3.0的数据表模型名称,若不采用TP,可传递空值。<br>      * @param array         $field      字段映射,分类cid,上级分类fid,分类名称,格式化后分类名称fullname<br>       +----------------------------------------------------------<br>      */<br><br>     public function __construct($model = '', $fields = array()) {<br>         if (is_string($model) &amp;&amp; (!empty($model))) {<br>             if (!$this-&gt;model = D($model))<br>                 $this-&gt;error = $model . "模型不存在!";<br>         }<br>         if (is_object($model))<br>             $this-&gt;model = &amp;$model;<br><br>         $this-&gt;fields['cid'] = $fields['0'] ? $fields['0'] : 'cid';<br>         $this-&gt;fields['fid'] = $fields['1'] ? $fields['1'] : 'fid';<br>         $this-&gt;fields['name'] = $fields['2'] ? $fields['2'] : 'name';<br>         $this-&gt;fields['fullname'] = $fields['3'] ? $fields['3'] : 'fullname';<br>     }<br><br>     /**<br>       +----------------------------------------------------------<br>      * 获取分类信息数据<br>       +----------------------------------------------------------<br>      * @param array,string  $condition  查询条件<br>      * @param string        $orderby    排序<br>       +----------------------------------------------------------<br>      */<br>     private function _findAllCat($condition, $orderby = NULL) {<br>         $this-&gt;rawList = empty($orderby) ? $this-&gt;model-&gt;where($condition)-&gt;select() : $this-&gt;model-&gt;where($condition)-&gt;order($orderby)-&gt;select();<br>     }<br><br>     /**<br>       +----------------------------------------------------------<br>      * 返回给定上级分类$fid的所有同一级子分类<br>       +----------------------------------------------------------<br>      * @param   int     $fid    传入要查询的fid<br>       +----------------------------------------------------------<br>      * @return  array           返回结构信息<br>       +----------------------------------------------------------<br>      */<br>     public function getChild($fid) {<br>         $childs = array();<br>         foreach ($this-&gt;rawList as $Category) {<br>             if ($Category[$this-&gt;fields['fid']] == $fid)<br>                 $childs[] = $Category;<br>         }<br>         return $childs;<br>     }<br><br>     /**<br>       +----------------------------------------------------------<br>      * 递归格式化分类前的字符<br>       +----------------------------------------------------------<br>      * @param   int     $cid    分类cid<br>      * @param   string  $space<br>       +----------------------------------------------------------<br>      */<br>     private function _searchList($cid = 0, $space = "") {<br>         $childs = $this-&gt;getChild($cid);<br>         //下级分类的数组<br>         //如果没下级分类,结束递归<br>         if (!($n = count($childs)))<br>             return;<br>         $m = 1;<br>         //循环所有的下级分类<br>         for ($i = 0; $i              $pre = "";<br>             $pad = "";<br>             if ($n == $m) {<br>                 $pre = $this-&gt;icon[2];<br>             } else {<br>                 $pre = $this-&gt;icon[1];<br>                 $pad = $space ? $this-&gt;icon[0] : "";<br>             }<br>             $childs[$i][$this-&gt;fields['fullname']] = ($space ? $space . $pre : "") . $childs[$i][$this-&gt;fields['name']];<br>             $this-&gt;formatList[] = $childs[$i];<br>             $this-&gt;_searchList($childs[$i][$this-&gt;fields['cid']], $space . $pad . "  "); //递归下一级分类<br>             $m++;<br>         }<br>     }<br><br>     /**<br>       +----------------------------------------------------------<br>      * 不采用数据模型时,可以从外部传递数据,得到递归格式化分类<br>       +----------------------------------------------------------<br>      * @param   array,string     $condition    条件<br>      * @param   int              $cid          起始分类<br>      * @param   string           $orderby      排序<br>       +----------------------------------------------------------<br>      * @return  array           返回结构信息<br>       +----------------------------------------------------------<br>      */<br>     public function getList($condition = NULL, $cid = 0, $orderby = NULL) {<br>         unset($this-&gt;rawList, $this-&gt;formatList);<br>         $this-&gt;_findAllCat($condition, $orderby, $orderby);<br>         $this-&gt;_searchList($cid);<br>         return $this-&gt;formatList;<br>     }<br><br>     /**<br>       +----------------------------------------------------------<br>      * 获取结构<br>       +----------------------------------------------------------<br>      * @param   array            $data         二维数组数据<br>      * @param   int              $cid          起始分类<br>       +----------------------------------------------------------<br>      * @return  array           递归格式化分类数组<br>       +----------------------------------------------------------<br>      */<br>     public function getTree($data, $cid = 0) {<br>         unset($this-&gt;rawList, $this-&gt;formatList);<br>         $this-&gt;rawList = $data;<br>         $this-&gt;_searchList($cid);<br>         return $this-&gt;formatList;<br>     }<br><br>     /**<br>       +----------------------------------------------------------<br>      * 获取错误信息<br>       +----------------------------------------------------------<br>      * @return  string           错误信息字符串<br>       +----------------------------------------------------------<br>      */<br>     public function getError() {<br>         return $this-&gt;error;<br>     }<br><br>     /**<br>       +----------------------------------------------------------<br>      * 检查分类参数$cid,是否为空<br>       +----------------------------------------------------------<br>      * @param   int              $cid          起始分类<br>       +----------------------------------------------------------<br>      * @return  boolean           递归格式化分类数组<br>       +----------------------------------------------------------<br>      */<br>     private function _checkCatID($cid) {<br>         if (intval($cid)) {<br>             return true;<br>         } else {<br>             $this-&gt;error = "参数分类ID为空或者无效!";<br>             return false;<br>         }<br>     }<br><br>     /**<br>       +----------------------------------------------------------<br>      * 检查分类参数$cid,是否为空<br>       +----------------------------------------------------------<br>      * @param   int         $cid        分类cid<br>       +----------------------------------------------------------<br>      */<br>     private function _searchPath($cid) {<br>         //检查参数<br>         if (!$this-&gt;_checkCatID($cid))<br>             return false;<br>         $rs = $this-&gt;model-&gt;find($cid);                                        //初始化对象,查找上级Id;<br>         $this-&gt;formatList[] = $rs;                                            //保存结果<br>         $this-&gt;_searchPath($rs[$this-&gt;fields['fid']]);<br>     }<br><br>     /**<br>       +----------------------------------------------------------<br>      * 查询给定分类cid的路径<br>       +----------------------------------------------------------<br>      * @param   int         $cid        分类cid<br>       +----------------------------------------------------------<br>      * @return  array                   数组<br>       +----------------------------------------------------------<br>      */<br>     public function getPath($cid) {<br>         unset($this-&gt;rawList, $this-&gt;formatList);<br>         $this-&gt;_searchPath($cid);                                               //查询分类路径<br>         return array_reverse($this-&gt;formatList);<br>     }<br><br>     /**<br>       +----------------------------------------------------------<br>      * 添加分类<br>       +----------------------------------------------------------<br>      * @param   array         $data        一维数组,要添加的数据,$data需要包含上级分类ID。<br>       +----------------------------------------------------------<br>      * @return  boolean                    添加成功,返回相应的分类ID,添加失败,返回FALSE;<br>       +----------------------------------------------------------<br>      */<br>     public function add($data) {<br>         if (empty($data))<br>             return false;<br>         return $this-&gt;model-&gt;data($data)-&gt;add();<br>     }<br><br>     /**<br>       +----------------------------------------------------------<br>      * 修改分类<br>       +----------------------------------------------------------<br>      * @param   array         $data     一维数组,$data需要包含要修改的分类cid。<br>       +----------------------------------------------------------<br>      * @return  boolean                 组修改成功,返回相应的分类ID,修改失败,返回FALSE;<br>       +----------------------------------------------------------<br>      */<br>     public function edit($data) {<br>         if (empty($data))<br>             return false;<br>         return $this-&gt;model-&gt;data($data)-&gt;save();<br>     }<br><br>     /**<br>       +----------------------------------------------------------<br>      * 删除分类<br>       +----------------------------------------------------------<br>      * @param   int         $cid        分类cid<br>       +----------------------------------------------------------<br>      * @return  boolean                 删除成功,返回相应的分类ID,删除失败,返回FALSE<br>       +----------------------------------------------------------<br>      */<br>     public function del($cid) {<br>         $cid = intval($cid);<br>         if (empty($cid))<br>             return false;<br>         $conditon[$this-&gt;fields['cid']] = $cid;<br>         return $this-&gt;model-&gt;where($conditon)-&gt;delete();<br>     }<br><br> }<br> ?&gt;这个编辑器太不给力了,编辑框又这么小,详细的使用方法和测试包去我的blog下载吧,http://blog.51edm.org/post/78

AD:真正免费,域名+虚机+企业邮箱=0元

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号