php->无限级分类

用php实现下面的功能,方法:数据库表的合理设计+递归

1.业务逻辑
(1)表结构
分类表
字段:cat_id、cat_name、cat_desc、、、parent_id(ps:每个分类的上一级分类)
(2)商品分类功能具体分析
分类控制器:CategoryController.class.php
分类模型: CategoryModel.class.php
curd(具体增、删、改、查):
添加分类:1.显示分类表单 2.接收数据插入数据库
修改分类表单:1.显示修改表单 2.接收更新数据插入数据库
删除:一步操作,直接删除
关键代码实现如下:
分类模型
<pre>
<?php
//商品分类模型
class CategoryModel extends Model{
//获取所有分类
public function getCats(){
$sql="select * from {$this->table}";
$cats=$this->db->getAll($sql);
return $this->tree($cats);
}
//对所有获取的分类重新排序
function tree($arr,$pid=0,$level=0)
{
static $res=array();
foreach ($arr as $v)
{
if($v['parent_id']==$pid)
{
$v['level']=$level;
$res[]=$v;
$this->tree($arr,$v['cat_id'],$level+1);
}
}
return $res;
}
}
?>
</pre>
分类控制器模型
<pre>
<?php
后台商品分类管理
class CategoryController extends Controller{
//显示分类
public function indexAction(){
include CUR_VIEW_PATH.'cat_list.html';
}
//添加分类,1.显示添加表单 2.接收数据插入到数据库
public function addAction(){
//获取所有分类
$CategoryModel=new CategoryModel('category');
$cats=$this->getCats();
include CUR_VIEW_PATH.'cat_add.html';
}
public function insertAction(){
//1.接收数据 ?以什么形式收集
$date['cat_name']=trim($_POST['cat_name']);
$date['parent_id']=$_POST['parent_id'];
$date['unit']=$_POST['unit'];
$date['sort_order']=$_POST['sort_order'];
$date['cat_des']=trim($_POST['cat_des']);
$date['is_show']=$_POST['is_show'];

        //2.验证接收到的数据和处理
          if($date['cat_name']===''){
              $this->jump('index.php?p=admin&c=category&a=add','分类名称不能为空');
          }
        //调用模型插入数据库并给出提示
          $categoryModel=new CategoryModel('category');
          if($categoryModel->insert($date)){
          $this->jump('index.php?p=admin&c=category&a=index','success');
          }else{
           $this->jump('index.php?p=admin&c=category&a=add','fail');

          }
  }

}
?>
</pre>
视图
<pre>
<tr>
<td class="label">上级分类:</td>
<td>
<select name="parent_id">
<option value="0">顶级分类</option>
<?php foreach ($cats as $cat) :?>
<option value="<?php echo $cat['cat_id'];?>">
<?php echo str_repeat(" ", $cat['level']);?>
<?php echo $cat['cat_name'];?>
</option>
<?php endforeach;?>
</select>
</td>
</tr>
</pre>
积累函数:trim() 去掉空白 str_repeat(' ',n) 重复前面的内容n次
积累快捷键:ctrl+shift+D 快速复制一行,ctrl+D 选中相同的,相同东西同时修改

2333第一次用简书写东西,代码框,插图搞了半天、、、
代码框:pre
插图:七牛很好用哦!img标签引入即可
近期打算,尽快用git,把源码托管到上面

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容