添加商品属性

思路:根据【后台15】类型表{id,type_name}与属性表{id,attr_name,attr_type,attr_option_values,type_id}

  1、建表商品属性表p39_goods_attr{id,attr_value,attr_id,goods_id}

  1. /********商品属性表【多对多:一个属性可以有多个值,一个商品可以有多个属性,一个属性可以对应多个商品】*******/
  2. drop if exists p39_goods_attr;
  3. create table p39_goods_attr
  4. (
  5. id mediumint unsigned not null auto_increment comment 'Id',
  6. attr_value varchar() not null default '' comment '属性值',
  7. attr_id mediumint unsigned not null comment '属性Id', //属性id对应属性表中的属性id->值
  8. goods_id mediumint unsigned not null comment '商品Id',
  9. primary key (id),
  10. key goods_id(goods_id),
  11. key attr_id(attr_id)
  12. )engine=InnoDB default charset=utf8 comment '商品属性';

注:在商品表p39_goods中添加字段保存类型id

  1. ALTER TABLE p39_goods ADD column type_id mediumint unsigned not null default '' comment '类型id';

2、在添加商品/Goods/add.html的表单中使用封装好的函数buildSelect()制作一个类型的下拉框,并放一个UL标签来存放属性

3、在商品控制器中添加ajaxGetAttr处理这个AJAX请求,输出json

4、AJAX与JS绑定事件addNewAttr

  1. // 选择类型获取属性的AJAX
  2. $("select[name=type_id]").change(function(){
  3. // 获取当前选中的类型的id
  4. var typeId = $(this).val();
  5. // 如果选择了一个类型就执行AJAX取属性
  6. if(typeId > )
  7. {
  8. // 根据类型ID执行AJAX取出这个类型下的属性,并获取返回的JSON数据
  9. $.ajax({
  10. type : "GET",
  11. url : "<?php echo U('ajaxGetAttr', '', FALSE); ?>/type_id/"+typeId,
  12. dataType : "json",
  13. success : function(data)
  14. {
  15. /** 把服务器返回的属性循环拼成一个LI字符串,并显示在页面中 **/
  16. var li = "";
  17. // 循环每个属性
  18. $(data).each(function(k,v){
  19. li += '<li>';
  20.  
  21. // 如果这个属性类型是可选的就有一个+
  22. if(v.attr_type == '可选')
  23. /************ 绑定点击事件增加[+] =》addNewAttr()******/
  24. li += '<a onclick="addNewAttr(this);" href="#">[+]</a>';
  25. // 属性名称
  26. li += v.attr_name + ' : ';
  27. // 如果属性有可选值就做下拉框,否则做文本框
  28. if(v.attr_option_values == "")
  29. li += '<input type="text" name="attr_value['+v.id+'][]" />';
  30. else /********* v.id[属性ID(attr_id)做下标],提交表单处理*************/
  31. {
  32. li += '<select name="attr_value['+v.id+'][]"><option value="">请选择...</option>';
  33. // 把可选值根据,转化成数组
  34. var _attr = v.attr_option_values.split(',');
  35. // 循环每个值制作option
  36. for(var i=; i<_attr.length; i++)
  37. {
  38. li += '<option value="'+_attr[i]+'">';
  39. li += _attr[i];
  40. li += '</option>';
  41. }
  42. li += '</select>';
  43. }
  44.  
  45. li += '</li>'
  46. });
  47. // 把拼好的LI放到 页面中
  48. $("#attr_list").html(li);
  49. }
  50. });
  51. }
  52. else
  53. $("#attr_list").html(""); // 如果选的是请 选择就直接清空
  54. });
  55.  
  56. // 点击属性的+号2
  57. function addNewAttr(a)
  58. {
  59. // $(a) --> 把a转换成jquery中的对象,然后才能调用jquery中的方法
  60. // 先获取所在的li
  61. var li = $(a).parent();
  62. if($(a).text() == '[+]')
  63. {
  64. var newLi = li.clone();
  65. // +变-
  66. newLi.find("a").text('[-]');
  67. // 新的放在li后面
  68. li.after(newLi);
  69. }
  70. else
  71. li.remove();
  72. }

5、循环处理每个属性值插入到商品属性表=>修改商品模型GoogsModel.class.php 在添加后_after_insert()的钩子方法中添加代码

  1. /***************处理插入的商品属性p39_goods_attr***/
  2. $attrValue = I('post.attr_value');
  3. $gaModel = M('goods_attr');
  4. //var_dump($attrValue);die;
  5. foreach ($attrValue as $K => $v)
  6. {
  7. //把属性值数组【二维】去重
  8. $v = array_unique($v);
  9. $k = $K;
  10. //var_dump($v);die;
  11. foreach ($v as $k1 => $v1)
  12. {
  13. $gaModel->add(array(
  14. 'goods_id' => $data['id'],
  15. 'attr_id' => $k,
  16. 'attr_value' => $v1,
  17. ));
  18. }
  19. } 

  注:在添加商品时,把商品类型更新到商品表中的type_id字段上,修改商品模型设置允许接收type_id字段

商品属性的删除

思路:当删除一件商品时,这件商品所有的属性也一起删除

PHP.41-TP框架商城应用实例-后台16-商品属性2-AJAX添加、删除的更多相关文章

  1. PHP.43-TP框架商城应用实例-后台18-商品属性3-库存量管理

    库存量管理 思想:为商品的每个多选属性设置库存量!!要把多选属性排列组合分别指定库存量!! 效果如下:[由商品已经添加的属性决定] 1.建表goods_number{goods_id,goods_nu ...

  2. PHP.42-TP框架商城应用实例-后台17-商品属性3-商品分类的修改与删除

    商品分类的修改 1.改表单Goods/edit.html,加下拉框 2.因为商品属性修改涉及商品属性表goods_attr{id,attr_value,attr_id,goods_id}与属性表att ...

  3. PHP.40-TP框架商城应用实例-后台15-商品属性与库存量1-不同商品(唯一属性、可选属性),属性类型

    思路: 1.不同商品属于不同的类型,如:手机.服装.电脑等类型 2.不同的类型有不同的属性,其中分为唯一属性和可选属性,如服装:可选属性{尺寸:S,M,L……;颜色:白色,黑色……}唯一属性:材质 首 ...

  4. PHP.36-TP框架商城应用实例-后台12-商品管理-主分类添加、修改、搜索(连表查询)

    需求:一个商品必须有一个主分类,一个主分类可以有多个商品 [一对多] 修改表p39_goods,增加外键约束,增加索引 主分类添加[控制器->页面] 1.在控制器GoodsController. ...

  5. PHP.31-TP框架商城应用实例-后台7-商品会员修改-页面优化,多表数据更新

    商品表修改功能 1.页面优化,类似添加页面 <layout name="layout" /> <div class="tab-div"> ...

  6. PHP.26-TP框架商城应用实例-后台3-商品修改、删除

    商品修改{修改页一般与添加页有百分之九十的相似度} create($_POST,Model::MODEL_UPDATE):系统内置的数据操作包括Model::MODEL_INSERT(或者1)和Mod ...

  7. PHP.24-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图

    添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace ...

  8. PHP.48-TP框架商城应用实例-后台23-权限管理-权限验证

    权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,= ...

  9. PHP.28-TP框架商城应用实例-后台5-多表操作-商品表与品牌表

    表与表之间的关系:1:1 1:多 多:多 功能需求决定表关系 此处的表关系为:品牌表:商品表=1:多 1.首先在表结构上关联,在多的表(商品表)添加一个字段,关联一的表(品牌表)的ID(主键) 添加字 ...

随机推荐

  1. TP5.0:新建控制器

    例如,我们在admin模块下创建一个名为OneMenu.php的控制器 1.在该控制器文件中内容为: 2.访问的URL为:http://localhost/tp5/public/index.php/a ...

  2. 关于GitHubGit

    一.Github项目地址:https://github.com/gyguyt/Helloworld123 二.什么是Github? Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或 ...

  3. 通过一个例子学习Kubernetes里的PersistentVolumeClaim的用法

    Kubernetes的pod本身是无状态的(stateless),生命周期通常比较短,只要出现了异常,Kubernetes就会自动创建一个新的Pod来代替它. 而容器产生的数据,会随着Pod消亡而自动 ...

  4. 小故事学设计模式之Command : (一) 在永和豆浆店

    IT的事就是过场多,过场多了就容易忘,所以我们不妨看一个记一个,这也是一个办法,顺便跟同行们学习交流一下)前几天出去拍照,饿到腿软, 回城附近有一家永和豆浆店, 我们决定去那边解决午餐.豆浆店里面还不 ...

  5. Jupyter notebook 的一个问题

    Traceback (most recent call last): File , in get value = obj._trait_values[self.name] KeyError: 'all ...

  6. likelihood(似然) and likelihood function(似然函数)

    知乎上关于似然的一个问题:https://www.zhihu.com/question/54082000 概率(密度)表达给定下样本随机向量的可能性,而似然表达了给定样本下参数(相对于另外的参数)为真 ...

  7. logback.xml常用配置

    一.logback的介绍 Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- classic和logback-acc ...

  8. Spring多个版本源码地址分享

    源码地址为:http://repo.spring.io/simple/libs-release-local/org/springframework/spring/,以供研究源码的朋友. 我看了好几本关 ...

  9. HTML5之转动的轮子

    <!doctype html><html> <head></head> <body> <canvas width="1000 ...

  10. 【题解】洛谷P1002过河卒

    首先,一道入门DP 然而对于蒟蒻的我已经难到爆了好吗 第一点:动态转移方程 用DP的关键! 这题我们可以发现每一步的方案数由上面的那步加上左边的那步得到 所以自然而然的方程就出来了: f[i][k]= ...