需求分析:
1.一件商品必须属于一个主分类
荣耀 畅玩7X 4GB+32GB 全网通4G全面屏手机 标配版 极光蓝属于手机这个类
2.一件商品可以同时属于多个扩展分类
荣耀 畅玩7X 4GB+32GB 全网通4G全面屏手机 标配版 极光蓝 属于智能手机类,也属于拍照手机类
你是否知道一个更容易着手问题?
create table p39_goods
(
id mediumint unsigned not null auto_increment comment 'Id',
goods_name varchar(150) not null comment '商品名称',
market_price decimal(10,2) not null comment '市场价格',
shop_price decimal(10,2) not null comment '本店价格',
goods_desc longtext comment '商品描述',
is_on_sale enum('是','否') not null default '是' comment '是否上架',
is_delete enum('是','否') not null default '否' comment '是否放到回收站',
addtime datetime not null comment '添加时间',
logo varchar(150) not null default '' comment '原图',
sm_logo varchar(150) not null default '' comment '小图',
mid_logo varchar(150) not null default '' comment '中图',
big_logo varchar(150) not null default '' comment '大图',
mbig_logo varchar(150) not null default '' comment '更大图',
brand_id mediumint unsigned not null default '0' comment '品牌id',
cat_id mediumint unsigned not null default '0' comment '主分类Id',
primary key (id),
key shop_price(shop_price),
key addtime(addtime),
key brand_id(brand_id),
key cat_id(cat_id),
key is_on_sale(is_on_sale)
)engine=InnoDB default charset=utf8 comment '商品';
联想产品与品牌关系的做法,模仿其做法:
ALTER TABLE p39_goods ADD cat_id mediumint unsigned not null default '0' comment '主分类Id';
修改商品的表单添加一个主分类下拉框
商品控制器中取出分类数据:
从CategoryController中:
$model = D('category');
$catData=$model->getTree();
'catData'=>$catData
粘贴到Goods添加方法中
public function add(){
if(IS_POST){
// var_dump($_POST);
// die;
$model =D('goods');
if( $model->create(I('post.'),1)) {
if($model->add()){
//插入到数据库
$this->success('操作成功',U('lst'));
exit;
//http://localhost:8989/php/TpShop/Admin/goods/add
}
}
$error=$model->getError();
$this->error($error);
}
//显示表单
//取出所有会员级别
$mlModel=D('member_level');
$mlData=$mlModel->select();
$model = D('category');
$catData=$model->getTree();
//取出所有的品牌
// $brandModel=D('brand');
//$brandData=$brandModel->select();
// print_r($brandData);
//
$this->assign(array(
// 'brandData'=>$brandData,
'catData'=>$catData,
'mlData'=>$mlData,
'_page_title'=>'添加商品',
'_page_btn_name'=>'商品列表',
'_page_btn_link'=>U('lst'),
));
$this->display();
}
从视图层复制代码至add.html
<tr>
<td class="label">上级分类:</td>
<td>
<select name="parent_id">
<option value="0">顶级分类</option>
<?php foreach ($catData as $k => $v): ?>
<option value="<?php echo $v['id']; ?>"><?php echo str_repeat('-', 8*$v['level']) . $v['cat_name']; ?></option>
<?php endforeach; ?>
</select>
</td>
</tr>
修改商品模型:类比以上做法
protected $insertFields='goods_name,market_price,shop_price,is_on_sale,goods_desc,brand_id,cat_id';
//修改时调用create方法允许接收的字段
protected $updateFields='id,goods_name,market_price,shop_price,is_on_sale,goods_desc,brand_id,cat_id';
//定义验证规则
protected $_validate=array(
array('cat_id', 'require', '必须选择主分类!', 1),
array('goods_name', 'require', '商品名称不能为空',1),
array('market_price','currency','市场价格必须为货币类型',1),
array('shop_price','currency','本店价格必须为货币类型',1),
);
同理类比:
public function edit(){
$id=I('get.id');
$model =D('goods');
if(IS_POST){
if( $model->create(I('post.'),2)) {
if(FALSE!==$model->save()){
//插入到数据库
$this->success('操作成功',U('lst'));
exit;
}
}
$error=$model->getError();
$this->error($error);
}
//显示表单
$data=$model->find($id);
$this->assign('data',$data);
//取出所有的品牌
// $brandModel=D('brand');
// $brandData=$brandModel->select();
// print_r($brandData);
// 取出所有的分类做下拉框
$catModel = D('category');
$catData = $catModel->getTree();
// 设置页面信息
$this->assign(array(
'catData' => $catData,
// 'brandData'=>$brandData,
'_page_title' => '修改商品',
'_page_btn_name' => '商品列表',
'_page_btn_link' => U('lst'),
));
$this->display();
}
修改edit.html
<tr>
<td class="label">上级分类:</td>
<td>
<select name="cat_id">
<option value="0">顶级分类</option>
<?php foreach ($catData as $k => $v):
// 跳过当前分类和子分类
//if($v['id'] == $data['id'] || in_array($v['id'], $children))
//continue ;
if($v['id'] == $data['cat_id'])
$select = 'selected="selected"';
else
$select = '';
?>
<option <?php echo $select; ?> value="<?php echo $v['id']; ?>"><?php echo str_repeat('-', 8*$v['level']) . $v['cat_name']; ?></option>
<?php endforeach; ?>
</select>
</td>
</tr>