扩展Cart购物车类以修改options中的项目
本帖最后由 曜日晨阳 于 2013-4-8 09:09 编辑在/application/libraries/下新建文件MY_Cart.php,拷贝以下内容进去。
使用方法:
$this->load->library('cart');
$item = array(
'rowid' => $rowid, //指定修改商品的rowid
'modify_option' => $modify_option_value //修改options数组下面名为modify_option的值为$modify_option_value
);
$this->cart->modify($item);
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
/**
* CI_Cart
* --------------------------------------
* Author : xiehai
* Contact : 50083000@qq.com
*
*/
class MY_Cart extends CI_Cart {
private $modify_option;
function __construct() {
parent::__construct();
}
//单个修改options其中某项值
//$item = array(
// 'rowid' => $item['rowid'],
// 'modify_option' => $modify_option_value
//);
function modify($items = array()) {
if (!is_array($items) OR count($items) == 0) {
return FALSE;
}
//修改项的KEY值
$this->modify_option = key(array_slice($items, -1, 1, true));
$save_cart = FALSE;
if (isset($items['rowid']) AND isset($items[$this->modify_option])) {
if ($this->_modify($items) == TRUE) {
$save_cart = TRUE;
}
}
// Save the cart data if the insert was successful
if ($save_cart == TRUE) {
$this->_save_cart();
return TRUE;
}
return FALSE;
}
function _modify($items = array()) {
//判断存在
if (!isset($items['rowid']) OR !isset($this->_cart_contents[$items['rowid']]) OR !isset($this->_cart_contents[$items['rowid']]['options'][$this->modify_option])) {
return FALSE;
}
//判断是否和原来一样
if ($this->_cart_contents[$items['rowid']]['options'][$this->modify_option] == $items[$this->modify_option]) {
return FALSE;
}
$this->_cart_contents[$items['rowid']]['options'][$this->modify_option] = $items[$this->modify_option];
return TRUE;
}
}
代码经过测试了吗,这么多语法错误都没改,竟然版主还加分,:L:L:L:L:L:L:L:L:L 本帖最后由 二蛋蛋 于 2013-4-8 00:00 编辑
//这里 $item 应为 $items
$this->modify_option = key(array_slice($item, -1, 1, true));
$save_cart = FALSE;
//这里 $modify_option 应为 $this->modify_option
if (isset($items['rowid']) AND isset($items[$modify_option])) {
if ($this->_modify($items) == TRUE) {
从文档直接跳过来的,不仔细看还真吓人一跳,希望出现在文档里的东西能严谨些!
似乎是为了修改cart中的option,但看不明为何弄得如此复杂。
CI_Cart中原有update()及_update()。update()呼叫_update(),再具体执行修改,但_update()的修改中并没包括修改option。
为何不在MY_Cart中仅加入用户的_update(),在用户的_update()中先处理修改option,再呼叫parent::_update()?
概念码如下
<?phpif ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Cart extends CI_Cart {
function _update($items = array()){
//修改option的码
.
.
.
return parent::__update($items);
}
}
?>
直接把option的新值送进cart内去update,有必要多弄个$modify_option,modify()及_modify()吗?
燃雲 发表于 2013-4-8 22:07 static/image/common/back.gif
似乎是为了修改cart中的option,但看不明为何弄得如此复杂。
CI_Cart中原有update()及_update()。update() ...
新手写给新手看的,何必那么较真。 CI的购物车数据放在SESSION里吗?如果客户换个电脑这些数据是不是就没了? jinphen 发表于 2013-8-5 10:33 static/image/common/back.gif
CI的购物车数据放在SESSION里吗?如果客户换个电脑这些数据是不是就没了?
session文件是存在服务器端的.
页:
[1]