在前一篇博客中,小猪给大家分享了如何在CI中使用购物车类的一些基础.但是没有结合数据库中的具体数据来进行演示.今天我就来结合数据库中的数据来进一步演示CI的购物车类的一些高级用法.
准备工作
首先在数据库表中新建我们的商品表.1
2
3
4
5
6
7
8
9
10
CREATE TABLE IF NOT EXISTS `products` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`price` decimal(13,2) NOT NULL,
`image` varchar(255) NOT NULL,
`option_name` varchar(255) NOT NULL,
`option_values` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
其中,id作为上面的表示,name为商品的名称,price为商品的价格.image为商品的图片地址,option_name为商品的属性,例如颜色,尺码等.option_values为商品的属性值.
作为演示,这边的商品属性只设置成一个.不能像淘宝那样为每一个商品动态的随意添加属性.
然后插入三条演示数据1
2
3
4
5
INSERT INTO `products` (`id`, `name`, `price`, `image`, `option_name`, `option_values`) VALUES
(1, 'Rubber Ducky', '2.99', 'ducky.jpg', '', ''),
(2, 'Horse', '4500.00', 'horse.jpg', 'Color', 'white,black,brown'),
(3, 'T-Shirt', '12.99', 'tshirt.jpg', 'Size', 'small,medium,large');
其中第一条数据没有属性,第二条商品对应的属性为color,属性值为white,black,brown 三个值之间以因为逗号(,)隔开.第三条数据的属性值为尺码(size),分别对应值为大中小.同样以逗号隔开.为了提高用户体验,我们分别给每个商品配了一幅图片,放在网站根目录的images文件夹下.
编写controller代码
1 |
|
上述代码中加载了Products_model模型,并调用了其get_all()方法.然后加载了视图products文件.
所以在models文件夹中新建model类文件Products_model.php.编写方法get_all():
编写模型类
1 |
|
注意上述代码中,我们判断了商品是否包含option_valus属性,如果有的话,使用explode函数将其转化成一个数组,这样可以在前台页面直接使用数组的方式来访问商品的属性值.
编写视图文件:在view文件夹中新建products.php视图文件用来展示页面:
编写视图文件
1 |
|
注意上述视图文件中使用了部分表单辅助函数.
打开浏览器访问index方法.我们可以看到页面效果:
其中第一个商品没有属性,第二个和第三个商品因为有属性,所以我们生成了一个下拉框来给用户选择,每一个商品都有一个对应的按钮将当前选择的商品以及属性加入到购物车.
但是我们现在暂时还没有增加到购物车的代码.所以我们完善controller代码:增加一个添加到购物车的函数:
编写添加方法
1 |
|
其中用到了模型类中的根据id来获取一条商品信息的方法:我们在model类中新增函数:1
2
3
4
5
6
7
8
9
10
11
12
function get($id) {
$results = $this->db->get_where('products', array('id' => $id))->result\(\);
$result = $results[0];
if ($result->option_values) {
$result->option_values = explode(',',$result->option_values);
}
return $result;
}
和上面一样的,我们判断了商品是否含有属性值,如果有将其转化成数组.并返回
重新运行程序并尝试点击添加按钮!
可以看到我们成功的将商品加入到了购物车类.
如果要删除购物车中的某商品,我们需要将该条购物车商品的rowid的数量转成0即可,这里一定要注意的就是rowid而不是商品本身的id,这个我们在第一篇中已经有过具体的介绍.
在控制器中添加方法remove
编写删除方法
1 |
|
然后点击某条数据的删除按钮:
可以看到我们的商品已经从购物车中删除.
总结
接下来的工作可能就是需要处理支付的场景了!