商品分类的修改

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 = ; //循环次数
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.42-TP框架商城应用实例-后台17-商品属性3-商品分类的修改与删除的更多相关文章

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

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

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

     添加商品属性 思路:根据[后台15]类型表{id,type_name}与属性表{id,attr_name,attr_type,attr_option_values,type_id} 1.建表商品属性 ...

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

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

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

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

  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.48-TP框架商城应用实例-后台23-权限管理-权限验证

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

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

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

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

    Gii安装[GII适用于商城项目] 将Gii文件夹复到application 是,访问http://xx.com/index.php/gii Gii规则[Gii使用规则与建表规则密切相关] 1.建表字 ...

随机推荐

  1. March 11 2017 Week 10 Saturday

    Wisdom outweighs any wealth. 智慧比财富更有价值. Wisdom can create wealth if used in proper ways, it can help ...

  2. 关于Java中截取字符串

    获取系统时间:to_char(sysdate,'yyyy-mm-dd')截取CREATETIME常量的前10位字符串:CREATETIME.substring(0,10)截取DESCRIPT常量的前2 ...

  3. windows网络模型之完成端口(CompletionPort)详解 (转)

    转载自:https://blog.csdn.net/piggyxp/article/details/6922277 目录: 1. 完成端口的优点 2. 完成端口程序的运行演示 3. 完成端口的相关概念 ...

  4. Android(java)学习笔记5:线程的生命周期

    1. 我们学习线程本质就是学习如何开始线程和终止线程.下面这个关于线程的生命周期图,要牢记: 新建状态:当程序使用new关键字创建了一个线程之后,该线程就处于新建状态.此时和其他Java对象一样,它仅 ...

  5. cascade DecodeBBox层

    https://zhuanlan.zhihu.com/p/36095768 我的推断,第二第三阶段应该不是把所有anchor进行bounding box regression,然后再选取当前条件下的所 ...

  6. 【洛谷P3469】[POI2008]BLO-Blockade

    BLO-Blockade 题目链接 若一个点为割点:统计出每个子树的大小,两两相乘再相加, 再加上n-1,为这个点与其他点的拜访数, 因为拜访是互相的,最后再乘二即可 若一个点不是割点:只有(n-1) ...

  7. onInterceptTouchEvent和onTouchEvent调用关系详解 ...

    http://blog.csdn.net/lvxiangan/article/details/9309927 老实说,这两个小东东实在是太麻烦了,很不好懂,我自己那api文档都头晕,在网上找到很多资料 ...

  8. 关于css透明度的问题

    先看background和background-color background:可以设置背景颜色,背景图片,还有定位.默认background:no-repeat; background-color ...

  9. ATK 设计框架 之 Atk.CustomExpression

    在ATK-DataPortal框架中的xxxHandel中常用到的一种类型,形如: 1.protected virtual D ItemHandle(D item, Func<E, E> ...

  10. logback.xml模板详解

    <?xml version="1.0" encoding="UTF-8"?> <!-- 配置文件每隔1分钟,就检查更新 --> < ...