我正在尝试在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);
}
但我只是得到一个通用服务器错误。我有什么想法我做错了吗?我想扩展核心库可以让我调用我写的新方法吗?
答案 0 :(得分:1)
要创建自己的库或扩展本机CodeIgniter类,您需要先执行一些步骤。要访问CodeIgniter,您需要获取实例
$CI =& get_instance();
在您的自定义类中,您使用$ CI而不是$ this。您可以在下面的链接中阅读更多相关内容,它可以帮助您到达本课程所需的位置
http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html
希望这有帮助,不要犹豫,再问一些问题=)
答案 1 :(得分:1)
当您扩展核心类时,我在代码中找到了一个catch,您可以使用类方法使用其他方法或函数定义类变量
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();
}
}
}
答案 2 :(得分:1)
尝试这样的事情。 仅将运费添加到总计
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};
}
}