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.建表字 ...
随机推荐
- MAVEN本地下载、安装
1. 安装jdk (此处版本选择1.7以上) 此处不做安装说明!!! 2.Eclipse.配置及安装 此处不做安装说明!!! 3.maven安装包(此处选择apache-maven-3.5.2-bin ...
- iTunes备份路径,iTunes默认备份路径,iTunes修改备份路径
1:当前iTunes版本: 2:帮助给出的答复: 3:修改的操作界面: 实际文件夹路径:
- bzoj1264 [AHOI2006]基因匹配
Description 基因匹配(match) 卡卡昨天晚上做梦梦见他和可可来到了另外一个星球,这个星球上生物的DNA序列由无数种碱基排列而成(地球上只有4种),而更奇怪的是,组成DNA序列的每一种碱 ...
- pthread_create & pthread_exit
http://www.cppblog.com/saha/articles/189802.html 1. pthread_create #include <pthread.h> ...
- xml解析-jaxp之dom解析
package day06_parser.dom; /** * xml的解析技术:JAXP是Java API for XML Processing的英文字头缩写, * 中文含义是:用于XML文档处理的 ...
- Python 学习笔记(三)数字
Python 数字 int 整型 是正或负整数 2 long 长整型 整数最后是一个大写或小写的L 2L float 浮点型 由整数部分和小数部分组成 2.0 complex 复数 小 ...
- css3 笔记
1.元字符使用: []: 全部可选项 ||:并列 |:多选一 ?: 0个或者一个 *:0个或者多个 {}: 范围 2.CSS3属性选择器: E[attr]:存在attr属性即可: E[attr=val ...
- vim 输入特殊字符
在VIM中可以通过二合字符和十进制进行输入, 在输入模式中,Ctrl + V, 十进制 在输入模式中,Ctrl + K, 二合字符(区分大小写) 注意:特殊字符也算一个字节 通过用的^@是为了保证结尾 ...
- Python实现爬虫从网络上下载文档
最近在学习Python,自然接触到了爬虫,写了一个小型爬虫软件,从初始Url解析网页,使用正则获取待爬取链接,使用beautifulsoup解析获取文本,使用自己写的输出器可以将文本输出保存,具体代码 ...
- VMware虚拟机下载与安装(内附密钥)
VMware下载与安装 一.虚拟机的下载 1.进入VMware官网,点击左侧导航栏中的下载,再点击图中标记的Workstation Pro,如下图所示. 2.根据操作系统选择合适的产品,在这里以Win ...