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或记录

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

时间: 2024-10-12 01:17:57

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

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

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.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.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.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.26-TP框架商城应用实例-后台2-商品列表页-搜索、翻页、排序

商品列表页 1.翻页 控制器GoodsController.class.php添加方法lst(),显示列表页 在商品模型GoodsModel.class.php类中添加search方法 /** *实现翻页.搜索.排序 * */ public function search($perPage = 5) //$perPage控制显示条数 { /***********翻页***********/ //取出总的记录数 $count = $this->count(); //生成翻页类的对象 $pageOb