前言

其实很久之前就很想写这篇博客,但是由于我的记性差和项目的原因,总是没有写,今天忽然想起来,要是今天不写或许过几天就忘了,于是敲起键盘,写这篇博客。

数据库设计

对于一个项目来说,数据库的设计是一个至关重要的事情,如果数据库设计的不好,

那么往往会让项目变得更加复杂。

category中基本有4个属性

id:分类的唯一标识符

name:分类名

count:当前分类有多少子分类

parent_id:当前分类的父类id

为什么会这样分类呢?我们的商品类别有很多,并且商品分类是分级的,每一级下面又有很多子分类,子分类下面又有子分类,如下图:

通过观察可以发现,它的每一级都是有关联的,所以我们可以通过一个parent_id来让分类相关联,每个分类都有一个父类,parent_id记录了它的父类的id,当在最上层的时候他的父类为0。每一个分类都会有一个count来记录它的有多少子类,在实际用到的时候我们就可以通过count来判断当前分类有多少子类。

实际用例

当我们想要得到我们的电脑下面的所有的商品时

List<Long> resultList = new ArrayList<Long>();Category category = categoryDao.findOne(id);//id为当前选择的电脑idif (category.getCount() != 0) { //获取当前是否有子分类List<Category> list = categoryDao.findCategoryChild(category.getId());//寻找当前category的子分类while (flag) { //遍历当前list,找到叶子分类List<Category> tempList = new ArrayList<>();tempList.addAll(list);for (Category myid : tempList) {list.remove(myid);if (myid.getCount() == 0) {resultList.add(myid.getId());} else {List<Category> childList = categoryDao.findCategoryChild(myid.getId());list.addAll(childList);}}if (list.size() == 0)flag = false;}} else {resultList.add(id);}

通过这一系列的操作,就可以获得我们某个分类下的叶子分类。

当我们上传商品时我们可以选择我们的商品类别

就像这样,我们每次选择分类的时候都会自动的生成他的下一级菜单,代码如下:

html:

<div id="my_select" style="float: left;margin-left: 14.5%;"><select id="select_first"></select></div>

js:

var category;//分类信息
var mydiv;
$(function () {mydiv = $('#my_select');$('#my_select').on('change', "select", function () {var length = mydiv.children('select').length - 1;var index = $(this).index(); //当前select坐标for (var i = length; i > index; i--) {mydiv.children('select')[i].remove();//当我们改变某个select里面的值时,删除其后面的select}var tempValue = $(this).children('option:selected').val();//获取当前选中的值judge(tempValue);});$.get(contextPath + "/category", function (data) {//http get请求loadData(data);});});function loadData(data) { //解析返回的json数据data = jQuery.parseJSON(data);category = data.list;$("#select_first").empty();$.each(category, function (i, item) {if (item.parent_id == 0) {$("#select_first").append('<option value="' + item.id + '">' + item.name + '</option>'); //把没有父节点的类别添加进我们页面上}});}function judge(tempValue) {var temp = '<select  style="width: 100px;height: 30px;" >';var flag = 0;$.each(category, function (i, item) {if (item.parent_id == tempValue) {  //把选中值得子类加到后面temp += '<option value="' + item.id + '">' + item.name + '</option>';flag++;}});temp += '</select>';if (flag > 0) {mydiv.append(temp);}
}

分类管理:

在分类管理这块,自己写的话有点麻烦,所以就用了ztree,ztree是一块jq的树形插件,api比较简单,官网:http://www.ztree.me/v3/main.php ,ztree可以很方便的删除以及增加我们的节点,先把效果图贴出:

html:

<ul id="treeDemo" class="ztree"></ul>  //我们的树形菜单的容器<div id="rMenu">  //鼠标右键菜单控件<ul><li id="m_add"  data-toggle="modal" data-target="#edit">增加节点</li><li id="m_del" onclick="removeTreeNode();">删除节点</li><li id="m_check" onclick="editNode();">编辑节点</li></ul></div>

js:

var zTreeObj;// zTree 的参数配置,深入使用请参考 API 文档(setting 配置详解)var setting = {view: {dblClickExpand: false,showLine: false},check: {enable: true},data: {simpleData: {enable: true}},callback: {
//                onClick: onClickonRightClick: OnRightClick}};// zTree 的数据属性,深入使用请参考 API 文档(zTreeNode 节点数据详解)var zNodes = [];
//屏蔽系统菜单,使用自己的右键菜单布局function OnRightClick(event, treeId, treeNode) {if (!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) {zTree.cancelSelectedNode();showRMenu("root", event.clientX, event.clientY);} else if (treeNode && !treeNode.noR) {zTree.selectNode(treeNode);showRMenu("node", event.clientX, event.clientY);}}
//展示自己的右键菜单布局function showRMenu(type, x, y) {$("#rMenu ul").show();if (type=="root") {$("#m_del").hide();$("#m_check").hide();$("#m_unCheck").hide();} else {$("#m_del").show();$("#m_check").show();$("#m_unCheck").show();}rMenu.css({"top":y+"px", "left":x+"px", "visibility":"visible"});$("body").bind("mousedown", onBodyMouseDown);}function hideRMenu() {if (rMenu) rMenu.css({"visibility": "hidden"});$("body").unbind("mousedown", onBodyMouseDown);}function onBodyMouseDown(event){if (!(event.target.id == "rMenu" || $(event.target).parents("#rMenu").length>0)) {rMenu.css({"visibility" : "hidden"});}}var addCount = 1;
//增加节点function addTreeNode(newName) {hideRMenu();var  node;var  pidif (zTree.getSelectedNodes()[0]) {node = zTree.getSelectedNodes()[0];pid = zTree.getSelectedNodes()[0].id;} else {node = null;pid = 0;}addUtil(newName,pid,node);}function removeTreeNode() {//删除节点hideRMenu();var nodes = zTree.getSelectedNodes();if (nodes && nodes.length>0) {if (nodes[0].children && nodes[0].children.length > 0) {alert("不允许删除父节点,请把子节点一并删除")} else {deleteCategory(nodes[0],nodes[0].id);}}}var zTree, rMenu;function onClick(e,treeId, treeNode) {var zTree = $.fn.zTree.getZTreeObj("treeDemo");zTree.expandNode(treeNode);}$(document).ready(function(){zTreeObj = $.fn.zTree.init($("#treeDemo"), setting, zNodes);zTree = $.fn.zTree.getZTreeObj("treeDemo");rMenu = $("#rMenu");});
//获取我们的分类json信息$.get(contextPath + "/category", function (data) {data = jQuery.parseJSON(data);var array = new Array();var zTree = $.fn.zTree.getZTreeObj("treeDemo");$.each(data.list,function(i,item){var temp =  { id:item.id, pId:item.parent_id, name:item.name};array.push(temp);});zTree.addNodes(null,array);//把分类信息添加进我们的树中});$('#addConfirm').on('click',function(){$('#edit').modal('hide');//在这我自己定义的弹出框获取其的内容addTreeNode( $('#newnNode').val());});function addUtil(newName,pid,node){$.post(contextPath+"/mmt_admin/category/add",{parentid:pid,name:newName},function(data){data = $.parseJSON(data);var newNode = { id:data.bean.id,pId:data.bean.parent_id, name:data.bean.name}zTree.addNodes(node, newNode);})}function deleteCategory(node,id){$.ajax({url: contextPath+'/mmt_admin/category/'+id,type: 'DELETE',success: function(result) {result = $.parseJSON(result);if(result.status == 0){zTree.removeNode(node);alert('删除成功');}else{alert('删除失败,此节点下有商品');}}});}

商城开发之商品分类表的设计、使用、管理相关推荐

  1. 微信小程序、APP分销商城开发:分销功能模块设计

    前面我们讲了微信小程序商城基础营销功能:微信小程序商城.APP商城开发营销活动功能策划(拼团.砍价.秒杀.直播.优惠券等) 今天讲的分销系统更是强大的营销功能,它应该如何设计呢?我们的系统经过一点一点 ...

  2. 基于JavaScript网上商城开发设计 毕业设计-附源码261620

    Node.js网上商城的开发 摘  要 随着Internet的使用越来越广泛,在传统的商业模式中,对于日常各类商品,人们习惯于到各种商家店铺购买.然而在快节奏的新时代中,人们不一定能为购买各类商品腾出 ...

  3. 商城 商品模块 数据库 表设计

    商城 商品模块 数据库 表设计 要实现一个商城,对于商品模块中的数据库表设计不懂,主要是:相同类别的产品的产品参数相同,不同类别的不同,这里就不懂要怎么设计了,所以上网找几篇博客了解. 什么是SPU. ...

  4. 设计商品分类表 mysql_商品分类表设计

    标签: 所要做的业务如下图所示: 表设计有两种方法: 方法1: 商品分类表(category) 包括字段:id, name, parentId 注:id为自增,第一级的父类ID设计为0. 商品与分类关 ...

  5. 微信小程序商城开发记录二之数据表结构设计

    文章目录 前言 1.用户表 2.产品表 3.商品品牌表 4.商品分类表 5.订单表 6.订单商品信息表 7.购物车表 8.收获地址表 9.省市区地址联动表 10.广告信息表 11.优惠券表 12.优惠 ...

  6. 类似于京东商城等的商品分类搜索筛选功能实现

    前言 随着电子商务的迅速发展,各大专业和独立蓬勃而出.如京东,凡客等为众人皆知的.作为一个技术领域的人来说,我们会更多的看到其中的技术差别.今天我们就来说一下搜索结果中的筛选功能实现.这个问题有不少的 ...

  7. 毕业设计学习锋迷商城的的笔记(自己设计并手写后台商品管理,分类管理,用户,地址管理系统,订单管理,微信支付(内网穿透))

    文章目录 自己添加的后端管理页面 视频演示效果 论文地址 后台代码视频实现讲解思路 1. 商品管理 2.商品分类管理 3.商品地址管理 4.权限管理系统 权限管理系统文章地址 5.订单管理 5.1 6 ...

  8. 《微信小程序商城开发实战》笔者的新书,欢迎各位粉丝上京东购买

    编辑推荐 在当今移动互联网大潮中,微信应用凭借其庞大的用户基数和极强的用户黏性牢牢地占据着移动App应用的头把交椅之位,据相关统计,微信月活跃用户已达10亿之多,且占据着中国用户30%以上的应用时间, ...

  9. 谷粒商城开发踩坑及部分知识点大总结

    谷粒商城开发BUG踩坑及部分知识点大总结 基本上bug的出现位置和时间线都能够匹配 如果对你有帮助的话就点个赞哈 2022.6.28 github设置ssh免密登陆,以下代码在git bash上面输入 ...

最新文章

  1. golang中的可见性
  2. 关于arcgis发布wfs问题
  3. docker设置国内镜像加速的坑
  4. php和java整合开发实战_PHP和Java强强联合 PHP与Java集成开发详解
  5. mybatis plug 只查id_mybatis-plugin的几种常用的方法
  6. 等了一个月,我主讲的课程《机器学习》在中国大学慕课开课了!
  7. 微信小程序访问云数据库
  8. java mac jconsole_解决java maven项目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包问题
  9. android xml导进数据库,Android通过xml文件配置数据库
  10. ss命令,显示socket状态
  11. Selenium 编写第一个自动化脚本
  12. 升级到ASP.NET2.0之后的疑问
  13. 掌上百度2011java_掌上百度2011通用版 掌上百度 Java空间版
  14. 微信多开软件苹果版_微信多开教程—Mac版amp;Win版
  15. 如何运行计算机学报的LaTeX模板?
  16. Android TV Input Framework(TIF)--构建TV input list
  17. Python3.1 使用卡通头像网络模型生成卡通头像(基于GAN)
  18. 简单明了的网站结构设计呦!
  19. 缔造企鹅:产品经理是这样炼成的札记-技巧
  20. MacBook安裝系統報錯

热门文章

  1. 机器学习 | 决策树原理剪枝连续值缺失值处理
  2. 初玩OpenWRT之编译TP-Link WR841N V8固件
  3. 2015年系统架构师软考案例分析考点
  4. 开启投简历找工作新征程
  5. 揭秘橙子钱包拥有40万+用户的背后
  6. Android 自定义DatePick 只显示年月,日期选择年月
  7. python爬取flickr官网上图片
  8. PHP 常用函数 - 其他常用函数
  9. 基于HOPF振荡器的CPG单元模型matlab实现
  10. 再见 MySQL!这可能不再是一个哗众取宠的梗了