错误:在非对象上调用成员函数getProducts()

时间:2015-07-14 06:44:48

标签: php opencart

我收到错误:

  

致命错误:在非对象上调用成员函数getProducts()   在   /var/www/vhosts/designsense.net.au/gypsy/public_html/catalog/controller/module/cart.php   在第23行

这是我正在使用的代码。

    class ControllerModuleCart extends Controller { 
    protected function index() {
    $this->language->load('module/cart');

    $this->data['heading_title'] = $this->language->get('heading_title');
    $this->data['text_subtotal'] = $this->language->get('text_subtotal');
    $this->data['text_empty'] = $this->language->get('text_empty');
    $this->data['text_remove'] = $this->language->get('text_remove');
    $this->data['text_confirm'] = $this->language->get('text_confirm');
    $this->data['text_cart'] = $this->language->get('text_cart');
    $this->data['text_checkout'] = $this->language->get('text_checkout');
    $this->data['button_checkout'] = $this->language->get('button_checkout');
    $this->data['button_remove'] = $this->language->get('button_remove');
    $this->data['text_cart'] = $this->language->get('text_cart');

    $this->data['cart'] = $this->url->link('checkout/cart');
    $this->data['checkout'] = $this->url->link('checkout/checkout', '', 'SSL');

    // Get Cart Products
    $this->data['products'] = array();

    foreach ($this->cart->getProducts() as $result) {

        $option_data = array();

        foreach ($result['option'] as $option) {
            $option_data[] = array(
                'name'  => $option['name'],
                'value' => (strlen($option['option_value']) > 20 ? substr($option['option_value'], 0, 20) . '..' : $option['option_value'])
            );
        }

有关可能导致此问题的任何建议?

2 个答案:

答案 0 :(得分:0)

您无法在$this->cart->getProducts();循环中使用foreach

因此您需要为变量

赋值

$products = $this->cart->getProducts();

这一小段代码最重要的是它调用函数getProducts,这是system/library/cart.php中的核心过程。变量$products现在具有整个购物车数组+所有可能的选项,并且可以“迭代”通过。迭代意味着筛选数组,收集它的内容或通过循环。让我们来看看f unction getProducts(); In system/library/cart.php中发生的事情,找到这个函数的顶部: 然后在foreach循环

中使用它
foreach ($products as $product) 
{ 
  //your code here
}

此代码是foreach()循环设置,用于遍历我们在system/library/cart.php中设置的数组。它负责显示购物车页面中显示的所有内容以及产品选项。 foreach ($products as $product) {以下的所有内容都会根据需要重复多次,直到所有产品在阵列中停止运行。

这样可以正常工作。

阅读此Article as well

编辑01

public function getProducts()
{
    if ( !$this->data )
    {
        foreach ( $this->session->data['cart'] as $key => $quantity )
        {
            $product = explode(':', $key);
            $product_id = $product[0];
            $stock = true;// Options
            if ( isset($product[1]) )
            {
                $options = unserialize(base64_decode($product[1]));
            }
            else
            {
                $options = array();
            }
        }
    }
}

答案 1 :(得分:0)

尝试在调用函数getProducts()

之前加载模型
$this->load->model('catalog/product');