PHP.39-TP架構商城應用執行個體-後台16-商品屬性2-AJAX添加、刪除

來源:互聯網
上載者:User

標籤:engine   ==   move   arch   find   .com   迴圈   text   接收   

 添加商品屬性

思路:根據【後台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欄位

商品屬性的刪除

思路:當刪除一件商品時,這件商品所有的屬性也一起刪除

 

 

PHP.39-TP架構商城應用執行個體-後台16-商品屬性2-AJAX添加、刪除

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.