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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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中显示显示输出

<!--商品属性-->
            <table style="display:none;" width="90%" class="tab_table" align="center">
                <tr ><td>
                    商品类型:<?php buildSelect(\'Type\', \'type_id\', \'id\', \'type_name\', $data[\'type_id\']); ?>
                </td></tr>
                <tr>
                    <td><ul id="attr_list">
                    <!-- 循环所有原属性值 -->
                    <?php 
                    $attrId = array();  // 所有出现过的属性ID
                    foreach ($gaData as $k => $v):
                            // 判断如果这个属性ID第一次出现就是+否则是-
                            if(in_array($v[\'attr_id\'], $attrId))
                                $opt = \'-\';
                            else 
                            {
                                $opt = \'+\';
                                $attrId[] = $v[\'attr_id\'];
                            }
                     ?>
                        <li>
                            <input type="hidden" name="goods_attr_id[]" value="<?php echo $v[\'id\']; ?>" />
                            <?php if($v[\'attr_type\'] == \'可选\'): ?>
                                <a onclick="addNewAttr(this);" href="#">[<?php echo $opt; ?>]</a>
                            <?php endif; ?>
                            <?php echo $v[\'attr_name\']; ?> : 
                            <?php if($v[\'attr_option_values\']):
                                    $attr = explode(\',\', $v[\'attr_option_values\']);
                             ?>
                                <select name="attr_value[<?php echo $v[\'attr_id\']; ?>][]">
                                    <option value="">请选择</option>
                                    <?php foreach ($attr as $k1 => $v1): 
                                            if($v1 == $v[\'attr_value\'])
                                                $select = \'selected="selected"\';
                                            else 
                                                $select = \'\';
                                    ?>
                                        <option <?php echo $select; ?> value="<?php echo $v1; ?>"><?php echo $v1; ?></option>
                                    <?php endforeach; ?>
                                </select>
                            <?php else: ?>
                                <input type="text" name="attr_value[<?php echo $v[\'attr_id\']; ?>][]" value="<?php echo $v[\'attr_value\']; ?>" />
                            <?php endif; ?>
                        </li>
                    <?php endforeach; ?>
                    </ul></td>
                </tr>
            </table>
商品属性表单输出

注意:同一种属性中,应该第一个出现为+号,其他为-号

4、数据修改

思路:因为之后做的库存量的功能需要用到商品属性的ID,如果清空商品属性重新添加的话,ID就都变了,导致库存量的数据,会导致:每次修改商品后,库存量的数据就都失效了需要重新添加,所以不能按以前的方法,将原数据全部删除再更新

因此分三种情况

  1、添加新属性insert

  2、修改原属性update

  3、删除属性:使用AJAX删除

 4.1表单中增加隐藏域,提交商品属性对应的id 

  

  4.2修改商品模型GoodsModel.class.php/_before_update(),循环每个属性值,寻找有没有商品属性ID,如果有就修改;如果没有就添加

/********** 修改商品属性 **********/
            $gaid = I(\'post.goods_attr_id\');
            $attrValue = I(\'post.attr_value\');
            $gaModel = M(\'goods_attr\');
            $_i = 0;        //循环次数
            foreach ($attrValue as $k => $v)
            {
                foreach ($v as $k1 => $v1)
                {
                    //这个replace into 可以实现同样的功能
                    //replace into: 如果记录存在就修改,记录不存在就添加。以主键字段判断一条记录是否存在
                    //$gaModel->execute(\'REPLACE INTO p39_goods_attr VALUES("\'.$gaid[$_i].\'","\'.$v1.\'","\'.$k.\'","\'.$id.\'")\');
                    // 找这个属性值是否有id
                    if($gaid[$_i] == \'\')
                    $gaModel->add(array(
                        \'goods_id\' => $id,
                        \'attr_id\' => $k,
                        \'attr_value\' => $v1,
                    ));
                else 
                    $gaModel->where(array(
                        \'id\' => array(\'eq\', $gaid[$_i]),
                    ))->setField(\'attr_value\', $v1);
                
                $_i++;
                }
            }
处理商品属性

注:replace into用法

  replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)

  则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。

要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。

4.3AJAX删除

修改"-"号的JS代码,传入商品id

   商品控制器中添加方法处理这个请求:

 注:FIND_IN_SET(str,strlist)

  str 要查询的字符串
  strlist 字段名 参数以”,”分隔 如 (1,2,6,8)
  查询字段(strlist)中包含(str)的结果,返回结果为null或记录

  但是:这个函数是全表扫描,无法优化!所以如果表中数据量非常大,并且这个查询使用的非常频繁就不要用这个函数!

以上是关于PHP.40-TP框架商城应用实例-后台17-商品属性3-商品分类的修改与删除的主要内容,如果未能解决你的问题,请参考以下文章

PHP.36-TP框架商城应用实例-后台14-商品管理-商品扩展分类的删除修改

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

PHP.30-TP框架商城应用实例-后台6-商品会员-价格级别

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

PHP.26-TP框架商城应用实例-后台2-商品列表页-搜索翻页排序

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