2014-03-27 23 views
-1

我正在使用prestashop 1.5.6.0。當用戶點擊添加到購物車按鈕,我創建購物車規則並將其分配給購物車,如果我點擊右上角的「購物車」鏈接,我收到致命錯誤:調用成員函數getProducts()當購物車是空的時候,第一次在565行的/classes/CartRule.php中有對象。但是,如果購物車不是空的,那麼我沒有收到錯誤。單擊添加到購物車按鈕後將動態創建的購物車規則分配到購物車中的問題

分配規則,車到購物車中,我用了下面的代碼:

public function hookActionCartSave($params){ 
    $code = $this->context->cookie->__get('token'); 

    if (($cartRule = new CartRule(CartRule::getIdByCode($code))) && Validate::isLoadedObject($cartRule)) { 
     if ($error = $cartRule->checkValidity($this->context, false, true)) { 
      $this->errors[] = $error; 
     } else { 
      $this->context->cart->addCartRule($cartRule->id); 
     } 
    } 
} 

可以解決這個問題

感謝

回答

0

爲什麼你做任何人的幫助?如果您未將代碼設置爲購物車規則,則會自動將其添加到您的購物車...

而對於您的錯誤,問題是您的購物車沒有填充到您的上下文中被解僱。因此,如果您真的需要這樣做,您必須在函數「initContent」中創建自己的鉤子,放置在ParentOrderController中,這是檢查並添加購物車規則的地方。

0

您的代碼假定有效的Cart對象存在於Context對象中,即使它不可以。例如,在最初的購物車創建過程中不會調用此功能。

無論如何,這條規則在空車上將毫無意義。

只需添加:

if (!isset($this->context->cart) || !$this->context->cart || !$this->context->cart->nbProducts()) 
    return; 

當你的鉤子函數的第一行,並且應該做的伎倆。我假設,否則您的購物車規則邏輯功能正常(例如,當購物車包含產品時)。

編輯:只是爲了進一步澄清。 $cartRule->checkValidity($this->context, false, true)取決於Context中的Cart對象,如果沒有設置,則可能返回nullfalse