当前位置: 首页 > news >正文

夺命雷公狗TP3.2.3商城13-----无限极分类添加

由于我们需要使用到的是模型来验证一下,所以我们先到  D:\phpStudy\WWW\shop\WEB\Admin\Model   下创建一个CateModel.class.php

 

<?php
namespace Admin\Model;
use Think\Model;
class CateModel extends Model {
    protected $_validate = array(
        array('catename','require','分类名称不能为空',1)
    );
        
}

 

然后来设置一下模版:

 

然后我们来写  Cate  控制器 的add方法:

 

 public function add(){
            $mod = D('cate');
            if(IS_POST){
                $data['catename'] = I('catename');
                $data['pid'] = I('pid');
                if($mod -> create($data)){
                    if($mod->add($data)){
                        $this -> success('添加栏目成功');
                    }else{
                        $this -> error('添加栏目失败');
                    }
                }else{
                    $this -> error($mod -> getError());
                }
                return;
            }
            $this -> display();
        }

 我们添加几条数据看看:

然后到数据库看看:

 

已经添加成功咯,但是毕竟是无限极分类,总不能永远是父级栏目吧??

那么我们回到cata控制器下的add方法中,先从数据库取出数据,然后分配到模版中:

 

public function add(){
            $mod = D('cate');
            if(IS_POST){
                $data['catename'] = I('catename');
                $data['pid'] = I('pid');
                if($mod -> create($data)){
                    if($mod->add($data)){
                        $this -> success('添加栏目成功');
                    }else{
                        $this -> error('添加栏目失败');
                    }
                }else{
                    $this -> error($mod -> getError());
                }
                return;
            }
            $data = $mod -> select();
            $this -> assign('data',$data);
            $this -> display();
        }

 

然后到模版进行遍历一下数据:

 

然后到测试看看效果:

 然后添加一个父级为cate2的测试下,然后到数据库看看:

虽然添加成功了,但是我们的顶级栏目和子级栏目这样是不容易被大家区分出来,所以我们需要到D:\phpStudy\WWW\shop\WEB\Admin\Model  找到CateModel.class.php  对她进行修改下:

<?php
namespace Admin\Model;
use Think\Model;
class CateModel extends Model {
    protected $_validate = array(
        array('catename','require','分类名称不能为空',1)
    );
    //定义一个方法,获取树状的分类信息
    public function cateTree(){
        $cats = $this->order('id desc')->select();
        //通过tree里面的方法进行排序
        return $this->tree($cats);
    }
    public function tree($arr,$pid=0,$level=0){ //$level是自己定义出来的
        static $tree = array();
        foreach($arr as $v){
           if($v['pid']==$pid){
                //说明找到,保存
                $v['level'] = $level;
                $tree[] = $v;
                //继续找
                $this -> tree($arr,$v['id'],$level+1); //这里的cate_id表的id
            }
        }
        return $tree;
    }
        
}

 

然后回到控制器下,在取数据的时候用cateTree的方法来进行取数据:

public function lists(){
            $this -> display();
        }

        public function add(){
            $mod = D('cate');
            if(IS_POST){
                $data['catename'] = I('catename');
                $data['pid'] = I('pid');
                if($mod -> create($data)){
                    if($mod->add($data)){
                        $this -> success('添加栏目成功');
                    }else{
                        $this -> error('添加栏目失败');
                    }
                }else{
                    $this -> error($mod -> getError());
                }
                return;
            }
            $data = $mod -> cateTree();
            $this -> assign('data',$data);
            $this -> display();
        }

 

然后再模版页修改下添加数据的方法即可:

 

<td>
                                   <select name="pid">
                                        <option value="0">顶级分类</option>
                                        <volist name="data" id="vo">
                                        <option value="{$vo.id}">
                                            {$vo['level']|str_repeat="....",###} {$vo['catename']}
                                        </option>
                                        </volist>
                                   </select>
                                </td>

 

然后我去测试下添加,效果如下所示:

 

YES,添加成功。。

 

转载于:https://www.cnblogs.com/leigood/p/7257113.html

相关文章:

  • 【征文】Hadoop十周年特别策划——我与Hadoop不得不说的故事
  • hdu 1671 Phone List
  • HDU 4607 树的直径
  • 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
  • Oracle日志查看
  • Oracle查询最近执行过的SQL语句
  • 统一设备模型(1)——bus、subsys_interface、class、class_interface分析
  • IIS7.5 错误代码0x8007007e HTTP 错误 500.19 - Internal Server Error
  • 竖排主菜单鼠标滑动角度判断显示子分类
  • [NOIP2015] 运输计划
  • 【搜索】POJ-3669 BFS
  • Django model字段类型参考列表
  • 拓扑排序的原理及其实现
  • oracle11g 在azure云中使用rman进行实例迁移
  • Python三种排序算法
  • 10个最佳ES6特性 ES7与ES8的特性
  • CSS盒模型深入
  • Date型的使用
  • gulp 教程
  • JavaScript DOM 10 - 滚动
  • Javascript 原型链
  • laravel with 查询列表限制条数
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Median of Two Sorted Arrays
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • PAT A1050
  • 关于使用markdown的方法(引自CSDN教程)
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端技术周刊 2019-01-14:客户端存储
  • 前端相关框架总和
  • 嵌入式文件系统
  • 我的zsh配置, 2019最新方案
  • 详解移动APP与web APP的区别
  • 昨天1024程序员节,我故意写了个死循环~
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • ​什么是bug?bug的源头在哪里?
  • #define
  • #define、const、typedef的差别
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $$$$GB2312-80区位编码表$$$$
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)springboot教学评价 毕业设计 641310
  • (十一)手动添加用户和文件的特殊权限
  • (小白学Java)Java简介和基本配置
  • (一)基于IDEA的JAVA基础12