添加商品属性

思路:根据【后台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 table p39_goods_attr
(
id mediumint unsigned not null auto_increment comment 'Id',
attr_value varchar() not null default '' comment '属性值',
attr_id mediumint unsigned not null comment '属性Id', //属性id对应属性表中的属性id->值
goods_id mediumint unsigned not null comment '商品Id',
primary key (id),
key goods_id(goods_id),
key attr_id(attr_id)
)engine=InnoDB default charset=utf8 comment '商品属性';

注:在商品表p39_goods中添加字段保存类型id

ALTER TABLE p39_goods ADD column type_id mediumint unsigned not null default '' comment '类型id';

2、在添加商品/Goods/add.html的表单中使用封装好的函数buildSelect()制作一个类型的下拉框,并放一个UL标签来存放属性

3、在商品控制器中添加ajaxGetAttr处理这个AJAX请求,输出json

4、AJAX与JS绑定事件addNewAttr

// 选择类型获取属性的AJAX
$("select[name=type_id]").change(function(){
// 获取当前选中的类型的id
var typeId = $(this).val();
// 如果选择了一个类型就执行AJAX取属性
if(typeId > )
{
// 根据类型ID执行AJAX取出这个类型下的属性,并获取返回的JSON数据
$.ajax({
type : "GET",
url : "<?php echo U('ajaxGetAttr', '', FALSE); ?>/type_id/"+typeId,
dataType : "json",
success : function(data)
{
/** 把服务器返回的属性循环拼成一个LI字符串,并显示在页面中 **/
var li = "";
// 循环每个属性
$(data).each(function(k,v){
li += '<li>'; // 如果这个属性类型是可选的就有一个+
if(v.attr_type == '可选')
/************ 绑定点击事件增加[+] =》addNewAttr()******/
li += '<a onclick="addNewAttr(this);" href="#">[+]</a>';
// 属性名称
li += v.attr_name + ' : ';
// 如果属性有可选值就做下拉框,否则做文本框
if(v.attr_option_values == "")
li += '<input type="text" name="attr_value['+v.id+'][]" />';
else /********* v.id[属性ID(attr_id)做下标],提交表单处理*************/
{
li += '<select name="attr_value['+v.id+'][]"><option value="">请选择...</option>';
// 把可选值根据,转化成数组
var _attr = v.attr_option_values.split(',');
// 循环每个值制作option
for(var i=; i<_attr.length; i++)
{
li += '<option value="'+_attr[i]+'">';
li += _attr[i];
li += '</option>';
}
li += '</select>';
} li += '</li>'
});
// 把拼好的LI放到 页面中
$("#attr_list").html(li);
}
});
}
else
$("#attr_list").html(""); // 如果选的是请 选择就直接清空
}); // 点击属性的+号2
function addNewAttr(a)
{
// $(a) --> 把a转换成jquery中的对象,然后才能调用jquery中的方法
// 先获取所在的li
var li = $(a).parent();
if($(a).text() == '[+]')
{
var newLi = li.clone();
// +变-
newLi.find("a").text('[-]');
// 新的放在li后面
li.after(newLi);
}
else
li.remove();
}

5、循环处理每个属性值插入到商品属性表=>修改商品模型GoogsModel.class.php 在添加后_after_insert()的钩子方法中添加代码

/***************处理插入的商品属性p39_goods_attr***/
$attrValue = I('post.attr_value');
$gaModel = M('goods_attr');
//var_dump($attrValue);die;
foreach ($attrValue as $K => $v)
{
//把属性值数组【二维】去重
$v = array_unique($v);
$k = $K;
//var_dump($v);die;
foreach ($v as $k1 => $v1)
{
$gaModel->add(array(
'goods_id' => $data['id'],
'attr_id' => $k,
'attr_value' => $v1,
));
}

  注:在添加商品时,把商品类型更新到商品表中的type_id字段上,修改商品模型设置允许接收type_id字段

商品属性的删除

思路:当删除一件商品时,这件商品所有的属性也一起删除

PHP.41-TP框架商城应用实例-后台16-商品属性2-AJAX添加、删除的更多相关文章

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

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

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

    商品分类的修改 1.改表单Goods/edit.html,加下拉框 2.因为商品属性修改涉及商品属性表goods_attr{id,attr_value,attr_id,goods_id}与属性表att ...

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

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

  4. PHP.36-TP框架商城应用实例-后台12-商品管理-主分类添加、修改、搜索(连表查询)

    需求:一个商品必须有一个主分类,一个主分类可以有多个商品 [一对多] 修改表p39_goods,增加外键约束,增加索引 主分类添加[控制器->页面] 1.在控制器GoodsController. ...

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

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

  8. PHP.48-TP框架商城应用实例-后台23-权限管理-权限验证

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

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

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

随机推荐

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

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

  2. Haskell 与范畴论-函子、态射、函数

    范畴论基本概念 如果你是第一次听说范畴论(category theory),看到这高大上的名字估计心里就会一咯噔,到底数学威力巨大,光是高等数学就能让很多人噩梦连连.和搞编程的一样,数学家喜欢将问题不 ...

  3. extension Kingfisher where Base: Image:泛型类型的具体化与实例化

    具体化:针对特定的类型参量进行二次定义: 实例化:实例化:

  4. Linux CentOS7下安装Zookeeper-3.4.10服务(最新)

    Linux CentOS7下安装Zookeeper-3.4.10服务(最新) 2017年10月27日 01:25:26 极速-蜗牛 阅读数:1933   版权声明:本文为博主原创文章,未经博主允许不得 ...

  5. win7 bat copy 一个文件 到另外的文件夹内,路径得用引号哦

    win 7 的 用引号 把路径引起来 ,但是win10 的可以不用哦 !

  6. Flask—03-bootstrap与表单

    bootstrap与表单 Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML.CSS.JavaScript 开发的简洁.直观.强悍的前端 ...

  7. UIlable上下居中

    - (void)setView{ self.chooseImg = [[UIImageView alloc] initWithFrame:CGRectMake(TO_LEFT_D, (ROW_HEIG ...

  8. Angularjs基础(二)

    AngularJS 表达式 AngularJS 表达式写在双大括号内:{{expression}} AngularJS 表达式把数据绑定到HTML,这与ng-bind 指令有异曲同工之妙 Angula ...

  9. ETO的公开赛T3《寻星》 题解(BY 超級·考場WA怪 )

    题解 寻星 题意:给定一个有向带权图,定义从一点到另一点的某条路径长为路径上所有边权的最大值,并给定四个点编号w,t1,t2,t3. 求出一个点s,使它在到t1,t2,t3三点最短路径最大值最大或者根 ...

  10. POJ 1113--Wall(计算凸包)

    Wall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 40363 Accepted: 13754 Description On ...