0

我正在尝试扩展 CI 中本机购物车类的功能以增加运费。我首先将 MY_Cart.php 文件添加到 application/core。目前它只是这样做:

class MY_Cart extends CI_Cart {

$CI =& get_instance();

public function __construct() {
    parent::__construct();
}


public function add_shipping() {
       echo 'this function will eventually add shipping';       
}
}

然后在我将商品添加到购物车的方法中,我尝试调用新的 add_shipping 方法:

public function add() {
    $data['product'] = $this->Model_products->get_product_by_id($_POST['product_id']);
            $data = array(
           'id'      => $_POST['product_id'],
           'qty'     => 1,
           'price'   => $data['product'][0]->price ,
           'name'    => $data['product'][0]->product_name

        );

       $this->cart->add_shipping();
       $this->cart->insert($data);

         $data['title'] = 'Basket';

      $this->load->view('wrapper-no-cart','basket',$data);
}

但我只是得到一个通用的服务器错误。任何想法我做错了什么?我认为扩展核心库可以让我调用我编写的新方法?

4

3 回答 3

1

要创建自己的库或扩展本机 CodeIgniter 类,您需要先采取一些步骤。要访问 CodeIgniter 的东西,您需要获取一个实例

$CI =& get_instance();

在您的自定义类中,您使用 $CI 而不是 $this。您可以在下面的链接中阅读有关它的更多信息,它应该可以让您到达您需要参加这门课程的地方

http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html

希望这会有所帮助,不要犹豫再问更多问题=)

于 2013-04-29T11:20:59.223 回答
1

当您扩展核心类时,我在代码中发现了一个问题,您可以使用其他方法定义类变量或使用类方法定义函数

class MY_Cart extends CI_Cart {

//    $CI =& get_instance(); worng
    private $CI;

    public function __construct() {
        parent::__construct();
        $this->CI =& get_instance();
    }


    public function add_shipping() {
//wrong        if ($CI->cart->total_items() > 0){
if ($this->total_items() > 0){
            $this->total_items();       
        }
      }
    }
于 2013-04-29T11:38:16.627 回答
1

尝试这样的事情。 仅将运费添加到 TOTAL

if (!defined('BASEPATH'))
   exit('No direct script access allowed');

class MY_Cart extends CI_Cart
{
    public function __construct ( $params = array() )
    {
        parent::__construct ( $params ) ;
    }

    public function shipping($cost='0.3')
    {
        if( !$this->cart->total_items() > 1) return;

        $this->cart->total() =+  ( $this->cart->total() + (float)$cost );
        return $this;
    }

    public function __get ( $name )
    {
        $instance =&get_instance();
        return $instance->{$name};
    }
}
于 2013-04-29T12:11:47.067 回答