当前位置:首页 > CMS教程 > Thinkphp > 列表

thinkphp 实现无限分类

发布:smiling 来源: PHP粉丝网  添加日期:2014-04-12 08:18:11 浏览: 评论:0 

以上是效果图

1.数据库设计

2.添加后数据库的数据如下图

解析下:cid  栏目自增id

pid 栏目的父类id,id为0表示是顶级栏目

cat_name  栏目名称

path 表示栏目的层级关系

实现效果主要用到:

mysql的一个函数  concat():返回结果为连接参数产生的字符串

1,控制器的分类显示方法

  1. public function   fenlei  (){ 
  2. $cate=M('Category'); 
  3. $list=$cate->field("cid,cat_name,pid,path,concat(path,'-',cid) as bpath")->order('bpath')->select(); 
  4. foreach($list as $key=>$value){ 
  5. $list[$key]['count']=count(explode('-',$value['bpath'])); 
  6. $this->assign('alist',$list); 
  7. $this->display(); 

2,控制器的分类添加方法

  1. public function addCat(){ 
  2. $cate=D('Category'); 
  3. if($cate->create()){ 
  4. if($cate->add()){ 
  5. $this->redirect('/Test/fenlei'); 
  6. }else
  7. $this->error('添加栏目失败'); 
  8. }else
  9. $this->error($cate->getError()); 

3,栏目模型类

  1. <?php 
  2. class CategoryModel extends Model{ 
  3. protected $_auto=array
  4. array('path','tclm',3,'callback'), 
  5. ); 
  6. function tclm(){ 
  7. $pid=isset($_POST['pid'])?(int)$_POST['pid']:0; 
  8. //echo ($pid); 
  9. if($pid==0){ 
  10. $data=0; 
  11. }else
  12. $list=$this->where("cid=$pid")->find(); 
  13. $data=$list['path'].'-'.$list['cid'];//子类的path为父类的path加上父类的cid 
  14. return $data
  15. ?> 

4,主要的html代码

  1. <body> 
  2. <form action="__URL__/addCat" method="post" > 
  3. <div style="text-align:center;margin-top:80px;" > 
  4. 请选择父类栏目:<select  name="pid"   size="20"  style="width:250px;"
  5. <volist name="alist"   id="v" > 
  6. <option value="{$v['cid']}" > 
  7. <for start="0" end="$v['count']"
  8. &nbsp;&nbsp;&nbsp; 
  9. </for
  10. {$v['cat_name']} 
  11. </option> 
  12. </volist> 
  13. </select> 
  14. <br/> 
  15. 新的栏目名称:<input  type="text" name="cat_name" style="width:230px;"  /><br/> 
  16. <input type="submit"  value="添加栏目" /> 
  17. </div> 
  18. </form> 
  19. </body> 

Tags: thinkphp 无限分类

分享到: