无限级分类,主要从两个方面进行考虑的。
1.数据库的设计,表中的parent_id字段。
2.在程序的层面上,来完成,使用递归。
我们只要理解下面这张图即可了解无限极分类的大部份了,
添加分类,首先是要载入添加的表单,确保表单的name和字段一致,首先在view里面创建一个category文件夹在里面将模版放进去,我们先来写add.html的文件,代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>SHOP 管理中心 - 添加分类 </title> <meta name="robots" content="noindex, nofollow"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link href="__ADMIN__/styles/general.css" rel="stylesheet" type="text/css" /> <link href="__ADMIN__/styles/main.css" rel="stylesheet" type="text/css" /> </head> <body> <h1> <span class="action-span"><a href="index.php?p=admin&c=category&a=index">商品分类</a></span> <span class="action-span1"><a href="index.php?act=main">SHOP 管理中心</a> </span><span id="search_id" class="action-span1"> - 添加分类 </span> <div style="clear:both"></div> </h1> <!-- start add new category form --> <div class="main-div"> <form action="" method="post" name="theForm" enctype="multipart/form-data" onsubmit="return validate()"> <table width="100%" id="general-table"> <tbody> <tr> <td class="label">分类名称:</td> <td><input type="text" name="cat_name" maxlength="20" value="" size="27"> <font color="red">*</font></td> </tr> <tr> <td class="label">上级分类:</td> <td> <select name="parent_id"> <option value="0">顶级分类</option> <volist name="cats" id='vo'> <option value="{$vo['cat_id']}">{$vo['cat_name']}</option> </volist> </select> </td> </tr> <tr id="measure_unit"> <td class="label">数量单位:</td> <td><input type="text" name="unit" value="" size="12"></td> </tr> <tr> <td class="label">排序:</td> <td><input type="text" name="sort_order" value="50" size="15"></td> </tr> <tr> <td class="label">是否显示:</td> <td><input type="radio" name="is_show" value="1" checked="true"> 是<input type="radio" name="is_show" value="0"> 否 </td> </tr> <tr> <td class="label">分类描述:</td> <td> <textarea name="cat_desc" rows="6" cols="48"></textarea> </td> </tr> </tbody></table> <div class="button-div"> <input type="submit" value=" 确定 "> <input type="reset" value=" 重置 "> </div> </form> </div> </div> </body> </html>
这里完成了后,下一步就是开始写CategoryController.class.php控制器里面的add方法了
public function add(){ if(IS_POST){ //分类信息入库 $data['cat_name'] = I('cat_name'); $data['parent_id'] = I('parent_id',0,'int');//parent_id通常是整型,所以做个小处理 $data['cat_desc'] = I('cat_desc'); $data['unit'] = I('unit');//数量 $data['is_show'] = I('is_show'); $data['sort_order'] = I('sort_order'); $categoryModel = D('category'); if($categoryModel->create($data)){ //验证通过 if($categoryModel->add()){ //插入成功 $this -> success('分类信息添加成功',U('index'),1); }else{ //插入失败 $this -> error('分类信息添加失败'); } }else{ //验证失败 $this -> error($categoryModel->getError()); } return; } //载入添加分类页面 //获取所有的分类 $cats = M('category')->select(); $this -> assign('cats',$cats); $this -> display(); }
我们做目录树的时候要玩到递归,递归说白了就是让他重复干事情的,给定一个pid,找他的后代节点,找到保存起来。
条件pid等于给定的id。
最终目的要成为这样:
先在model层里面开干
<?php //商品分类模型 namespace Admin\Model; use Think\Model; class CategoryModel extends Model{ //自动验证 protected $_validate = array( array('cat_name','require','商品名称不能为空'), ); //定义一个方法,获取树状的分类信息 public function catTree(){ $cats = $this->select(); return $this->tree($cats); } //定义一个方法,对给定的数组,递归形成树 public function tree($arr,$pid=0,$level=0){ static $tree = array(); foreach($arr as $v){ if($v['parent_id']==$pid){ //说明找到,保存 $v['level'] = $level; $tree[] = $v; //继续找 $this -> tree($arr,$v['cat_id'],$level+1); } } return $tree; } }
然后在控制器下改下他的查询方式,代码如下:
public function add(){ if(IS_POST){ //分类信息入库 $data['cat_name'] = I('cat_name'); $data['parent_id'] = I('parent_id',0,'int');//parent_id通常是整型,所以做个小处理 $data['cat_desc'] = I('cat_desc'); $data['unit'] = I('unit');//数量 $data['is_show'] = I('is_show'); $data['sort_order'] = I('sort_order'); $categoryModel = D('category'); if($categoryModel->create($data)){ //验证通过 if($categoryModel->add()){ //插入成功 $this -> success('分类信息添加成功',U('index'),1); }else{ //插入失败 $this -> error('分类信息添加失败'); } }else{ //验证失败 $this -> error($categoryModel->getError()); } return; } //载入添加分类页面 //获取所有的分类 $cats = D('category')->catTree(); $this -> assign('cats',$cats); $this -> display(); }
最后在add.html模版下修改下即可
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>SHOP 管理中心 - 添加分类 </title> <meta name="robots" content="noindex, nofollow"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link href="__ADMIN__/styles/general.css" rel="stylesheet" type="text/css" /> <link href="__ADMIN__/styles/main.css" rel="stylesheet" type="text/css" /> </head> <body> <h1> <span class="action-span"><a href="index.php?p=admin&c=category&a=index">商品分类</a></span> <span class="action-span1"><a href="index.php?act=main">SHOP 管理中心</a> </span><span id="search_id" class="action-span1"> - 添加分类 </span> <div style="clear:both"></div> </h1> <!-- start add new category form --> <div class="main-div"> <form action="" method="post" name="theForm" enctype="multipart/form-data" onsubmit="return validate()"> <table width="100%" id="general-table"> <tbody> <tr> <td class="label">分类名称:</td> <td><input type="text" name="cat_name" maxlength="20" value="" size="27"> <font color="red">*</font></td> </tr> <tr> <td class="label">上级分类:</td> <td> <select name="parent_id"> <option value="0">顶级分类</option> <volist name="cats" id='vo'> <option value="{$vo['cat_id']}">{$vo['level']|str_repeat=" ",###}{$vo['cat_name']}</option> </volist> </select> </td> </tr> <tr id="measure_unit"> <td class="label">数量单位:</td> <td><input type="text" name="unit" value="" size="12"></td> </tr> <tr> <td class="label">排序:</td> <td><input type="text" name="sort_order" value="50" size="15"></td> </tr> <tr> <td class="label">是否显示:</td> <td><input type="radio" name="is_show" value="1" checked="true"> 是<input type="radio" name="is_show" value="0"> 否 </td> </tr> <tr> <td class="label">分类描述:</td> <td> <textarea name="cat_desc" rows="6" cols="48"></textarea> </td> </tr> </tbody></table> <div class="button-div"> <input type="submit" value=" 确定 "> <input type="reset" value=" 重置 "> </div> </form> </div> <div id="footer"> 版权所有 © 2014-2016 夺命雷公狗 - 技术总结 - </div> </div> </body> </html>
相关推荐
无限级分类 php无限级分类 php分类 无数组 无递归...
无限级分类就是可以一直往下分类。 我看过很多网站的无限级分类,大多都是多次循环读取SQL语句,我这次用的是一次循环分类的...小贤PHP无限级分类程序 http://www.myde520.com/down/class.rar http://www.xunbaoke.com/
php 无限级分类 带分类路径
PHP无限级分类,非递归.非常好用带数据库!
采用php语言编写的无限级分类程序,使用递归实现的无限极分类!
提供PHP无限级分类程序附带源码!提供下载!经测试可以用!
一个php无限级分类的多个方案分析!自带数据库
小贤PHP无限级分类程序.7z
php无限级分类-un-limit-tree,供大家学习使用,感兴趣的朋友们可以下载下来,用到自己的项目中。
这是一个很方便的速度,运行速度很快的无限级分类
——学习参考资料:仅用于个人学习使用! php代码-使用代码解决PHP无限级分类,通过子类ID查找顶级分类的ID的源代码
在做PHP程序时,经常会遇到设计多级菜单的编程,其实在许多的开源后台都是无限级的分类,而这些分类的数据仅仅只保存到了一个数据表里,只是用源代码进行了关联而已。而这些关联的数据并不复杂,其实一个优秀的后台...
PHP无限级分类,PHP无限级分类,PHP无限级分类
无限级分类算法原理及实例演示 什么是无限分类呢?就像windows下新建一个文件夹,在新建的文件夹下又可以新建 一个文件夹,这样无限循环下去,无限分类也是这样,父类可以分 出它子类,子类又 可以分出它的子类,...
无限级分类就是可以一直往下分类。 我看过很多网站的无限级分类,大多都是多次循环读取SQL语句,我这次用的是一次循环分类的全部记录 ,然后将其赋值给一个数据,最后通过对数组的循环来显示分类!效果还不错...
有这样一个表,id是分类的ID,...再后来……似乎比较少有机会遇到无限级分类…… 最近有个同事问我怎么“优雅”的解决这个问题。 于是我灵机一动,就有了如下解决方案: <?php $sql = "select id, pid from tablena
php+jquery无限级分类php+jquery无限级分类
ajax php mysql 无限级分类 保证能用