PHP.39-TP框架商城应用实例-后台16-商品属性2-AJAX添加、删除

 添加商品属性

思路:根据【后台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}

/********商品属性表【多对多:一个属性可以有多个值,一个商品可以有多个属性,一个属性可以对应多个商品】*******/
drop if exists p39_goods_attr;
create table p39_goods_attr
(
    id mediumint unsigned not null auto_increment comment ‘Id‘,
    attr_value varchar(150) not null default ‘‘ comment ‘属性值‘,
    attr_id mediumint unsigned not null comment ‘属性Id‘,            //属性id对应属性表中的属性id->值
    goods_id mediumint unsigned not null comment ‘商品Id‘,
    primary key (id),
    key goods_id(goods_id),
    key attr_id(attr_id)
)engine=InnoDB default charset=utf8 comment ‘商品属性‘;

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

ALTER TABLE p39_goods ADD column type_id mediumint unsigned not null default ‘0‘ comment ‘类型id‘;

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

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

4、AJAX与JS绑定事件addNewAttr

// 选择类型获取属性的AJAX
        $("select[name=type_id]").change(function(){
            // 获取当前选中的类型的id
            var typeId = $(this).val();
            // 如果选择了一个类型就执行AJAX取属性
            if(typeId > 0)
            {
                // 根据类型ID执行AJAX取出这个类型下的属性,并获取返回的JSON数据
                $.ajax({
                    type : "GET",
                    url : "<?php echo U(‘ajaxGetAttr‘, ‘‘, FALSE); ?>/type_id/"+typeId,
                    dataType : "json",
                    success : function(data)
                    {
                        /** 把服务器返回的属性循环拼成一个LI字符串,并显示在页面中 **/
                        var li = "";
                        // 循环每个属性
                        $(data).each(function(k,v){
                            li += ‘<li>‘;

                            // 如果这个属性类型是可选的就有一个+
                            if(v.attr_type == ‘可选‘)
                                /************ 绑定点击事件增加[+] =》addNewAttr()******/
                                li += ‘<a onclick="addNewAttr(this);" href="#">[+]</a>‘;
                            // 属性名称
                            li += v.attr_name + ‘ : ‘;
                            // 如果属性有可选值就做下拉框,否则做文本框
                            if(v.attr_option_values == "")
                                li += ‘<input type="text" name="attr_value[‘+v.id+‘][]" />‘;
                            else    /********* v.id[属性ID(attr_id)做下标],提交表单处理*************/
                            {
                                li += ‘<select name="attr_value[‘+v.id+‘][]"><option value="">请选择...</option>‘;
                                // 把可选值根据,转化成数组
                                var _attr = v.attr_option_values.split(‘,‘);
                                // 循环每个值制作option
                                for(var i=0; i<_attr.length; i++)
                                {
                                    li += ‘<option value="‘+_attr[i]+‘">‘;
                                    li += _attr[i];
                                    li += ‘</option>‘;
                                }
                                li += ‘</select>‘;
                            }

                            li += ‘</li>‘
                        });
                        // 把拼好的LI放到 页面中
                        $("#attr_list").html(li);
                    }
                });
            }
            else
                $("#attr_list").html("");  // 如果选的是请 选择就直接清空
        });

        // 点击属性的+号2
        function addNewAttr(a)
        {
            // $(a)  --> 把a转换成jquery中的对象,然后才能调用jquery中的方法
            // 先获取所在的li
            var li = $(a).parent();
            if($(a).text() == ‘[+]‘)
            {
                var newLi = li.clone();
                // +变-
                newLi.find("a").text(‘[-]‘);
                // 新的放在li后面
                li.after(newLi);
            }
            else
                li.remove();
            }

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

/***************处理插入的商品属性p39_goods_attr***/
            $attrValue = I(‘post.attr_value‘);
            $gaModel = M(‘goods_attr‘);
            //var_dump($attrValue);die;
            foreach ($attrValue as $K => $v)
            {
                //把属性值数组【二维】去重
                $v = array_unique($v);
                $k = $K;
                //var_dump($v);die;
                foreach ($v as $k1 => $v1)
                {
                    $gaModel->add(array(
                        ‘goods_id‘ => $data[‘id‘],
                        ‘attr_id‘ => $k,
                        ‘attr_value‘ => $v1,
                    ));
                }
            } 

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

商品属性的删除

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

时间: 2024-10-12 16:48:31

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

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

库存量管理 思想:为商品的每个多选属性设置库存量!!要把多选属性排列组合分别指定库存量!! 效果如下:[由商品已经添加的属性决定] 1.建表goods_number{goods_id,goods_number,goods_str_id[商品属性id]} drop if exists p39_goods_number; create table p39_goods_number ( goods_id mediumint unsigned not null comment '商品Id', goods

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

思路: 1.不同商品属于不同的类型,如:手机.服装.电脑等类型 2.不同的类型有不同的属性,其中分为唯一属性和可选属性,如服装:可选属性{尺寸:S,M,L--;颜色:白色,黑色--}唯一属性:材质 首先把类型与属性关联起来 1.建表 类型表{p39_type} drop table if exists p39_type; create table p39_type ( id mediumint unsigned not null auto_increment comment 'Id', type

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

商品分类的修改 1.改表单Goods/edit.html,加下拉框 2.因为商品属性修改涉及商品属性表goods_attr{id,attr_value,attr_id,goods_id}与属性表attribute{id,attr_name,attr_option_values,type_id},而且考虑到当一个类型新增一个属性时,修改表也应该将其显示出来,所以应根据属性表连接商品属性表取出相关数据{同一类型所有属性,该商品已存属性值} 连表查询数据输出如下: 3.用PHP在表单edit.html

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

商品表修改功能 1.页面优化,类似添加页面 1 <layout name="layout" /> 2 3 <div class="tab-div"> 4 <div id="tabbar-div"> 5 <p> 6 <span class="tab-front" >通用信息</span> 7 <span class="tab-back&quo

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

商品修改{修改页一般与添加页有百分之九十的相似度} create($_POST,Model::MODEL_UPDATE):系统内置的数据操作包括Model::MODEL_INSERT(或者1)和Model::MODEL_UPDATE(或者2),当没有指定的时候,系统根据数据源是否包含主键数据来自动判断,如果存在主键数据,就当成Model::MODEL_UPDATE操作. save():用于更新数据库信息:如果失败返回false,如果成功返回受影响条数 1.控制器GoodsController.c

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

添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace Admin\Controller; use Think\Controller; //后台添加商品功能控制器 class GoodsController extends Controller { //显示和处理表单 public function add() { //判断用户是否提交了表单(如果提交了,就

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

权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,=>增加一个父控制器验证Session 让所有后台的控制器[除了Login控制器之外的]都继承自这个控制器 5.在管理员访问后台的任何一个页面之前先到数据库中查看当前管理员所在的角色是否有权限访问这个页面 在权限模型中增加此检查方法,在父类登录控制器中调用 6.后台左侧只显示当前管理员有权限访问的按钮

PHP.28-TP框架商城应用实例-后台4-使用Gii生成品牌表的代码

Gii安装[GII适用于商城项目] 将Gii文件夹复到application 是,访问http://xx.com/index.php/gii Gii规则[Gii使用规则与建表规则密切相关] 1.建表字段必须有中文名,则Gii在生成代码时才能识别某字段的中文名是什么: 2.某字段验证规则不能为空:设置该建表字段为not null:一般所有字段都为not null,若不希望生成验证规则,则加上默认值default(默认值可为空): 3.生成上传图片代码:字段名中需包含logo|image|pic|f

PHP.31-TP框架商城应用实例-后台9-商品相册-修改、删除(AJAX)

商品相册图片删除 当商品删除时,把相册中的图片一并从硬盘和数据库中删除,根据商品id[因为每一张商品相片都会生成三张缩略图,所以删除时要将其缩略图一并删除] //钩子方法_before_delete:删除前的操作 protected function _before_delete($option) { $id = $option['where']['id']; //要删除的商品的ID /***********删除商品相片********/ //先查询出原商品相册的路径 $gpModel = M(