无限分类

1.表的变化

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

2.控制器,模型的变化

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

    ()数据库配置 常见语句 Create table 'my_table'( int id not null auto_increment ) () 建表的时候出现text,bigInt,decimal ...

  2. OpenCart之特色商品(Featured)模块教程

    2019独角兽企业重金招聘Python工程师标准>>> 本教程由opencart中国网站制作,如有转载请注明出处: http://www.opencartchina.com/bbs/ ...

  3. 商品超市管理系统实现超市的商品维护模块(增查改)

    大家好,今天我看见许多人在问商品超市管理系统实现超市的商品维护模块(增查改),其实这个和我上次分享的学生管理系统差不多. 首先既然是商品维护模块,那就应该有商品信息来维护,那么要怎么样获取商品信息,我 ...

  4. 谷粒商城项目篇6_分布式基础完结篇_商品服务模块(品牌管理、平台属性、新增商品)、仓储服务模块(仓库管理)

    目录 商品服务模块 品牌管理 品牌对应三级目录的增删改查 平台属性 数据库表关系 规格参数 增删改查 销售属性 属性分组 新增商品 获取三级分类及品牌 商品json存储格式 数据库表设计 商品服务调用 ...

  5. 99.Spark大型电商项目-各区域热门商品统计-模块介绍

    目录 各区域热门商品统计 作业提交 大数据方向的职业发展规划 用户行为分析意义 本篇文章记录各区域热门商品统计-模块介绍. 各区域热门商品统计 需求:根据用户指定的日期范围,统计各个区域下的最热门的t ...

  6. 【青橙商城-管理后台开发】2. 商品服务模块搭建

    [青橙商城-管理后台开发]2. 商品服务模块搭建 1. 服务层模块-商品 pom.xml <dependencies><dependency><groupId>co ...

  7. 乐优商城(三)商品分类管理

    目录 一.数据 二.页面实现 2.1 页面分析 2.2 功能实现 2.2.1 url异步请求 2.2.2 后台接口实现 2.3 解决跨域请求 2.3.1 什么是跨域 2.3.2 解决跨域问题的方案 2 ...

  8. 进销存管理轻松实现入库商品分类管理

    很多销售型企业,在过去传统的管理模式下,商品出入库管理都依靠人工记录,企业不妨通过专业的进销存管理,轻松实现入库商品的分类管理. 前言 很多销售型企业,在过去传统的管理模式下,商品出入库管理都依靠人工 ...

  9. Guns二次开发(十):商品分类管理之【删】字诀

    关于博客中使用的Guns版本问题请先阅读   Guns二次开发目录 上一篇博客中,我们实现了商品分类的修改功能,这篇博客我们继续实现增删改查里最后的删除功能.首先要明确,我们平时所说的删除功能,其实可 ...

最新文章

  1. js阻止a标签默认事件的几种方法
  2. 聊聊JvmGcMetrics的managementExtensionsPresent
  3. centos7 mysql tar_CentOS7中mysql-5.7.21-el7-x86_64.tar.gz版MySQL的安装与配置
  4. RabbitMQ学习笔记-RabbitMQ深入理解
  5. parallel(parallelStream)并发问题
  6. [bzoj1969] [Ahoi2005]LANE 航线规划
  7. ViewPager 2 使用讲解
  8. 苹果切换输入法_忍不住分享!朋友圈发长文神器来了 —— 不折叠输入法
  9. 用frp开源工具,实现内网穿透(详细教程)
  10. 微信群对服务器的要求,微信群运营必看:运营微信群必做的7点要求
  11. Java 练习之回合制游戏,练习接口,随机,数组,可变参数
  12. 火狐浏览器的翻译问题
  13. NT3H2111_2211芯片简介
  14. PID闭环底盘调试记录
  15. 关于大商创安装默认数据清空说明
  16. 2022高职大数据竞赛0720更新参考实现
  17. 关于获取微信小程序码的“47001”错误码的坑
  18. 安装VIVE眼动追踪软件SRAnipal报错
  19. Android按键事件——上层与驱动的映射
  20. 前端面试题之HTML和css-很实用的知识点

热门文章

  1. 高通平台 5G RF调试总结
  2. HAWQ技术解析(十七) —— 最佳实践
  3. 我的世界java1.12种子_我的世界:1.12最值得收藏的10个地图种子,掠夺者,终界轻松找到...
  4. java我的世界填充方块_我的世界填充指令 填充TNT的指令是什么
  5. 未来两年,阿里云20%新增算力将使用自研CPU
  6. win10c语言0xc0000142,Win10应用程序无法正常启动0xc0000142错误的解决方法
  7. 星火燎原,遍地开花!2019链脉名片蓄势进发
  8. pwm波如何控制电机代码_电动车电机如何选择功率匹配的电机控制器?
  9. 背包问题一百块最少硬币数
  10. hdu2844 多重背包