2011-08-01 21 views
4

我一直在擺弄Magento購物車API(Magento v.1.5),發現當創建購物車(和添加產品)時,「sales_flat_quote」表中的「is_active」值設置爲「0」 。相反,如果您在商店界面中使用「添加到購物車」按鈕,則「is_active」值設置爲「1」。爲什麼Magento cart.create函數使購物車處於非活動狀態?

我做了一些挖掘,發現API在app/code/core/Mage/Checkout/Model/Cart/Api.php中設置了「is_active」。

這裏的代碼相關的功能塊:

public function create($store = null) 
{ 
    $storeId = $this->_getStoreId($store); 

    try { 
     /*@var $quote Mage_Sales_Model_Quote*/ 
     $quote = Mage::getModel('sales/quote'); 
     $quote->setStoreId($storeId) 
      ->setIsActive(false) 
      ->setIsMultiShipping(false) 
      ->save(); 
    } catch (Mage_Core_Exception $e) { 
     $this->_fault('create_quote_fault', $e->getMessage()); 
    } 
    return (int) $quote->getId(); 
} 

所以我不知道的意圖是什麼讓它假。商店界面和API之間存在行爲差異的原因是什麼?或者是否有必須通過API完成額外的工作才能使購物車啓動?

+0

如果您發佈了您正在使用的Magento的特定版本,將會非常有幫助,因爲事情往往會在版本之間發生相當大的變化。 –

+0

對不起,Magento v.1.5。我已將它添加到原始帖子中。 – jmvt

回答

2

我最好的猜測,這是一個猜測,因爲我無法讀懂原始開發人員的頭腦,他們會試圖阻止API生成的報價顯示在廢棄的購物車報告中。

is_active標誌用於指示客戶的主動報價,客戶應該只有一個主動報價。該標誌還用於知道何時可以從系統中自動刪除報價,理論上說,如果報價不活動,它將被轉換爲訂單並且不再需要。如果Mage_Checkout Cart API將標誌設置爲false,則報價可能會在您將其轉換爲訂單之前進行自動清理。通過將標誌設置爲false,它也會阻止您使用API​​創建客戶可以在前端使用的實時報價。

所以,我會說,如果您使用的API 創建一個客戶的報價,你需要添加一個發佈()方法。如果您使用的API的修改客戶的現有報價,您不會遇到問題,因爲它只在創建新報價時顯示。

在任何情況下,我個人認爲當前的行爲是由於清理例程使用該標誌來指示可移除引號的錯誤。