美文网首页
php->无限级分类

php->无限级分类

作者: AloneStray | 来源:发表于2016-12-11 18:23 被阅读0次

    用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,把源码托管到上面

    相关文章

      网友评论

          本文标题:php->无限级分类

          本文链接:https://www.haomeiwen.com/subject/onqpmttx.html