PHP.42-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 = ; //循环次数
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

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

str 要查询的字符串
strlist 字段名 参数以”,”分隔 如 (1,2,6,8)
查询字段(strlist)中包含(str)的结果,返回结果为null或记录
但是:这个函数是全表扫描,无法优化!所以如果表中数据量非常大,并且这个查询使用的非常频繁就不要用这个函数!
PHP.42-TP框架商城应用实例-后台17-商品属性3-商品分类的修改与删除的更多相关文章
- PHP.43-TP框架商城应用实例-后台18-商品属性3-库存量管理
库存量管理 思想:为商品的每个多选属性设置库存量!!要把多选属性排列组合分别指定库存量!! 效果如下:[由商品已经添加的属性决定] 1.建表goods_number{goods_id,goods_nu ...
- PHP.41-TP框架商城应用实例-后台16-商品属性2-AJAX添加、删除
添加商品属性 思路:根据[后台15]类型表{id,type_name}与属性表{id,attr_name,attr_type,attr_option_values,type_id} 1.建表商品属性 ...
- PHP.40-TP框架商城应用实例-后台15-商品属性与库存量1-不同商品(唯一属性、可选属性),属性类型
思路: 1.不同商品属于不同的类型,如:手机.服装.电脑等类型 2.不同的类型有不同的属性,其中分为唯一属性和可选属性,如服装:可选属性{尺寸:S,M,L……;颜色:白色,黑色……}唯一属性:材质 首 ...
- PHP.24-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图
添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace ...
- PHP.31-TP框架商城应用实例-后台7-商品会员修改-页面优化,多表数据更新
商品表修改功能 1.页面优化,类似添加页面 <layout name="layout" /> <div class="tab-div"> ...
- PHP.26-TP框架商城应用实例-后台3-商品修改、删除
商品修改{修改页一般与添加页有百分之九十的相似度} create($_POST,Model::MODEL_UPDATE):系统内置的数据操作包括Model::MODEL_INSERT(或者1)和Mod ...
- PHP.48-TP框架商城应用实例-后台23-权限管理-权限验证
权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,= ...
- PHP.28-TP框架商城应用实例-后台5-多表操作-商品表与品牌表
表与表之间的关系:1:1 1:多 多:多 功能需求决定表关系 此处的表关系为:品牌表:商品表=1:多 1.首先在表结构上关联,在多的表(商品表)添加一个字段,关联一的表(品牌表)的ID(主键) 添加字 ...
- PHP.27-TP框架商城应用实例-后台4-使用Gii生成品牌表的代码
Gii安装[GII适用于商城项目] 将Gii文件夹复到application 是,访问http://xx.com/index.php/gii Gii规则[Gii使用规则与建表规则密切相关] 1.建表字 ...
随机推荐
- 插上翅膀,让Excel飞起来——xlwings(一)
python操作Excel的模块,网上提到的模块大致有:xlwings.xlrd.xlwt.openpyxl.pyxll等,他们提供的功能归纳起来有两种:一.用python读写Excel文件,实际上就 ...
- Uva 11600 期望DP
题意:n个城市,相互可达(有n(n-1)/2条边),其中有一些道路上面有妖怪,现在,从1号城市出发,随机挑取一个城市走去,这个道路上的妖怪就会被消灭,求: 在平均情况下,需要走多少步,使得任意两个城市 ...
- Gym Gym 101147G 第二类斯特林数
题目链接:http://codeforces.com/gym/101147/problem/G 题意:n个人,去参加k个游戏,k个游戏必须非空,有多少种放法? 分析: 第二类斯特林数,划分好k个集合后 ...
- (第三场) C Shuffle Cards 【STL_rope || splay】
题目链接:https://www.nowcoder.com/acm/contest/141/C 题目描述 Eddy likes to play cards game since there are a ...
- 设置IE浏览器的默认主页
实现效果: 知识运用: RegistryKey类的GetValue方法 public Object GetValue (string name , Object defaultValue) name ...
- Vue状态管理-Bus
1.父子组件之间进行通讯: 父组件通过属性和子组件通讯,子组件通过事件和父组件通讯.vue2.x只允许单向数据传递. 先定义一个子组件AInput.vue: <template> < ...
- Autofac QuickStart
1 构建应用程序 示例: 我们期望有一个输出工具类,当前希望通过控制台(console)输出,但是又希望仅能在控制台模式下输出.所以我们把输出抽象为一个接口 using System; namespa ...
- Unity 游戏框架搭建 (十) QFramework v0.0.2小结
从框架搭建系列的第一篇文章开始到现在有四个多月时间了,这段时间对自己来说有很多的收获,好多小伙伴和前辈不管是在评论区还是私下里给出的建议非常有参考性,在此先谢过各位. 说到是一篇小节,先列出框架的概要 ...
- C#提取html中的汉字
using System.Text.RegularExpressions; private string StripHT(string strHtml) //从html中提取纯文本 { Regex r ...
- Redux学习笔记-----基础部分
Redux的基本原则 唯一数据源(应用的状态数据应该只存储在唯一的一个store上): 保持状态只读(不能直接修改Store的状态,而是应该通过派发一个action对象来完成) 数据改变只能通过纯函数 ...