用户
 找回密码
 入住 CI 中国社区
搜索
查看: 7727|回复: 6
收起左侧

[程序 App] 扩展Cart购物车类以修改options中的项目

[复制链接]
发表于 2013-2-20 11:27:41 | 显示全部楼层 |阅读模式
本帖最后由 曜日晨阳 于 2013-4-8 09:09 编辑

在/application/libraries/下新建文件MY_Cart.php,拷贝以下内容进去。

使用方法:

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复制代码
 
<?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;
    }
}
 
 
复制代码

评分

参与人数 1威望 +5 收起 理由
Hex + 5 赞一个!

查看全部评分

发表于 2013-4-7 23:48:49 | 显示全部楼层
代码经过测试了吗,这么多语法错误都没改,竟然版主还加分,
发表于 2013-4-7 23:53:28 | 显示全部楼层
本帖最后由 二蛋蛋 于 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) {


从文档直接跳过来的,不仔细看还真吓人一跳,希望出现在文档里的东西能严谨些!

点评

多谢指正~  发表于 2013-4-8 09:09
发表于 2013-4-8 22:07:36 | 显示全部楼层
似乎是为了修改cart中的option,但看不明为何弄得如此复杂。

CI_Cart中原有update()及_update()。update()呼叫_update(),再具体执行修改,但_update()的修改中并没包括修改option。

为何不在MY_Cart中仅加入用户的_update(),在用户的_update()中先处理修改option,再呼叫parent::_update()?

概念码如下

PHP复制代码
 
<?php  if ( ! 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-9 13:17:39 | 显示全部楼层
燃雲 发表于 2013-4-8 22:07
似乎是为了修改cart中的option,但看不明为何弄得如此复杂。

CI_Cart中原有update()及_update()。update() ...

新手写给新手看的,何必那么较真。
发表于 2013-8-5 10:33:55 | 显示全部楼层
CI的购物车数据放在SESSION里吗?如果客户换个电脑这些数据是不是就没了?
发表于 2013-12-24 15:00:11 | 显示全部楼层
jinphen 发表于 2013-8-5 10:33
CI的购物车数据放在SESSION里吗?如果客户换个电脑这些数据是不是就没了?

session文件是存在服务器端的.

本版积分规则