商品分类管理模块基本完成

无限分类

1.表的变化
    所谓无限分类,就是用一张表来实现所有分类,在原来简单分类表的基础上,加了个pid字段,这就是数据表方面的变化。

这里写图片描述

2.控制器,模型的变化
    我们原先的分类是一级的,就是分类下不能再添加分类了,我们现在开始改进,我们首先把想要的无限分类层级数据手动添加到数据库中:pid为0就是顶级分类,然后pid为某值就是某分类下,参考上图理解。
    现在我们还按以前的方法,在控制器中像输出所有管理员那样,来获得分类列表,这时候我们会发现,得到的结果不是我们想要的,我们要的是按分类有序排列的列表。
    这时候,我们发现控制器这样不够用了,此刻,我终于开始感觉到模型的用处了,(原来的模型啥都不用写,就能完成增删改查,我一直很好奇模型还有什么拓展作用),涉及到数据处理,就用模型来完成。
    思路是模型中新增得到树桩分类的方法,然后在控制器中调用模型的那个方法来获得有序的二维数组,不再是我们那个按数据表依次读下来的二维数组了。然后传到视图中,代码如下
    犯的几个错误:1.模型里写的方法,在控制器访问,要实例化模型后再访问(除非写的是静态方法) 2.不要用getdata作为模型里的函数名,估计是关键字,会出问题 3.到视图中,怎么把杠杠显示出来,我一开始用的是很low的原始伎俩,就是各个元素用level做class,然后写段js放在页面中,遇到class为啥的就加几个杠杠,蠢哭。查阅资料,发现神技`{$cate['level']|str_repeat="——丨",###}{$cate.cName}`,当然这一切都是建立在模型中level的存在基础上!
模型中
<?php

namespace app\admin\model;

use think\Model;

class Cate extends Model
{
   public function gettree(){
        $arr=$this->all();
        return $this->tree($arr);    
   }

   //定义一个方法,对给定的数组,递归形成树
    public function tree($arr,$pid=0,$level=0){
        static $tree = array();
        foreach($arr as $v){
            if($v['pid']==$pid){
                //说明找到,保存
                $v['level'] = $level;
                $tree[] = $v;
                //继续找
                $this -> tree($arr,$v['id'],$level+1);
            }
        }
        return $tree;
    }
}
控制器中
 public function categorylist(){
        $cate=new Cate;
        $cate=$cate->gettree();
        return view('categorylist',['cate'=>$cate]);
    }
视图中
<tbody>
                           {volist name="cate" id="cate"}
                                <tr>
                                <!--这里的id和for里面的c1 需要循环出来-->
                                <td><input type="checkbox" id="c1" class="check"><label for="c1" class="label">{$cate.id}</label></td>
                                <td>{$cate['level']|str_repeat="——丨",###}{$cate.cName}</td>
                                <td align="center">
                                <input type="button" value="修改" class="edit2 btn" info="{:url('admin/category/edit')}"><!--info好像没用上-->
                                <input type="button" value="删除" class="del btn" info="{:url('admin/category/del')}"><!--info好像没用上,用上咯-->
                                </td>
                            </tr>
                            {/volist}
                            <tr><td colspan="4"></td></tr>
                        </tbody>
添加分类
    主要就是在添加分类的视图中,增加一个上级分类,然后就是把分类列表传到下拉菜单中
public function add(){
        if(request()->isPost()){
            $catename=input('catename');
            $upcateid=input('upcateid');
            $cate=new Cate;
            $cate->cName=$catename;
            $cate->pid=$upcateid;
            if($cate->save()){
                return '分类:'.$catename.'新增成功!'.'<br>'.
                '<a class="ajax" info="'.url('admin/category/add').'">继续新增</a>'.'|'.'<a class="ajax" info="'.url('admin/category/categorylist').'">返回分类列表</a>';
            }else{
                return $cate->getError();
            }
        }else{
            $cate=new Cate;
            $cate=$cate->gettree();
            return view('add',['cate'=>$cate]);    
        }   
    }

然后点击提交的时候,要把select中选定的option中的id传去作为新增分类的pid

视图中
<td>
                                    <select id="downlist" style="width:200px;">
                                        <option>顶级分类 </option>
                                        {volist name="cate" id="cate"}
                                        <option value="{$cate.id}">{$cate['level']|str_repeat="——丨",###}{$cate.cName}</option>
                                        {/volist}
                                    </select>
                                </td>
jquery中
//新增分类提交
    $(document).on('click','.submit3',function(){
        var catename=$('#catename').val();
        var upcateid=$('#downlist').val();
        $.post("/lolnews/public/admin/category/add.html",
        {'catename':catename,'upcateid':upcateid},
        function(data){
            $('#ajaxshow').html(data);
        })
        return false;       
    });

无限分类基本完成。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值