曜日晨阳 发表于 2013-2-20 11:27:41

扩展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;
    }
}


二蛋蛋 发表于 2013-4-7 23:48:49

代码经过测试了吗,这么多语法错误都没改,竟然版主还加分,:L:L:L:L:L:L:L:L:L

二蛋蛋 发表于 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 22:07:36

似乎是为了修改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-9 13:17:39

燃雲 发表于 2013-4-8 22:07 static/image/common/back.gif
似乎是为了修改cart中的option,但看不明为何弄得如此复杂。

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

新手写给新手看的,何必那么较真。

jinphen 发表于 2013-8-5 10:33:55

CI的购物车数据放在SESSION里吗?如果客户换个电脑这些数据是不是就没了?

chery 发表于 2013-12-24 15:00:11

jinphen 发表于 2013-8-5 10:33 static/image/common/back.gif
CI的购物车数据放在SESSION里吗?如果客户换个电脑这些数据是不是就没了?

session文件是存在服务器端的.
页: [1]
查看完整版本: 扩展Cart购物车类以修改options中的项目