Товар (правило модели Mage SalesRule) с тем же идентификатором "5" уже существует
Я пытаюсь устранить эту ошибку, которая возникает всякий раз, когда вошедший в систему клиент добавляет код купона во время оформления заказа.
a:5:{i:0;s:67:"Item (Mage_SalesRule_Model_Rule) with the same id "5" already exist";i:1;s:1977:"#0 /var/www/vhosts/test.devcom/httpdocs/lib/Varien/Data/Collection/Db.php(576): Varien_Data_Collection->addItem(Object(Mage_SalesRule_Model_Rule))
#1 /var/www/vhosts/test.dev.com/httpdocs/app/code/core/Mage/SalesRule/Model/Validator.php(117): Varien_Data_Collection_Db->load()
#2 /var/www/vhosts/test.dev.com/httpdocs/app/code/core/Mage/SalesRule/Model/Quote/Freeshipping.php(60): Mage_SalesRule_Model_Validator->init('1', '1', 'INSTA20')
#3 /var/www/vhosts/test.dev.com/httpdocs/app/code/core/Mage/Sales/Model/Quote/Address.php(1013): Mage_SalesRule_Model_Quote_Freeshipping->collect(Object(Mage_Sales_Model_Quote_Address))
#4 /var/www/vhosts/test.dev.com/httpdocs/app/code/core/Mage/Sales/Model/Quote.php(1331): Mage_Sales_Model_Quote_Address->collectTotals()
#5 /var/www/vhosts/test.dev.com/httpdocs/app/code/core/Mage/Checkout/Model/Cart.php(458): Mage_Sales_Model_Quote->collectTotals()
#6 /var/www/vhosts/test.dev.com/httpdocs/app/code/core/Mage/Checkout/controllers/CartController.php(127): Mage_Checkout_Model_Cart->save()
#7 /var/www/vhosts/test.dev.com/httpdocs/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Checkout_CartController->indexAction()
#8 /var/www/vhosts/test.dev.com/httpdocs/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('index')
#9 /var/www/vhosts/test.dev.com/httpdocs/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#10 /var/www/vhosts/test.dev.com/httpdocs/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#11 /var/www/vhosts/test.dev.com/httpdocs/app/Mage.php(683): Mage_Core_Model_App->run(Array)
#12 /var/www/vhosts/test.dev.com/httpdocs/index.php(87): Mage::run('', 'store')
#13 {main}";s:3:"url";s:15:"/checkout/cart/";s:11:"script_name";s:10:"/index.php";s:4:"skin";s:7:"default";}
Я не уверен, что вызывает ошибку, так как код купона работает при выезде в качестве гостя.
Кто-нибудь сталкивался с этой ошибкой раньше и знает, в чем может быть причина? Я был бы признателен за любую помощь, пожалуйста...
1
Author: user1704524, 2014-05-09
2 answers
Пожалуйста, сделайте резервную копию кода:
Перейти к файлу
Lib/Varien/Data/Collection.php
Измените этот метод
public function addItem
Со следующим кодом
public function addItem(Varien_Object $item)
{
$itemId = $this->_getItemId($item);
if (!is_null($itemId)) {
if (isset($this->_items[$itemId])) {
// throw new Exception('Item ('.get_class($item).') with the same id "'.$item->getId().'" already exist');
} else {
$this->_items[$itemId] = $item;
}
}
else {
$this->_items[] = $item;
}
return $this;
}
4
Author: TBI Infotech, 2014-05-09 11:04:16
Вы также можете переопределить свою коллекцию calss Mage_Sales_Model_Resource_Order_Grid_Collection::addItem
, которая выдает следующее исключение:
<?php
class Fixed_Order_Grid_Collection extends Mage_Sales_Model_Resource_Order_Grid_Collection{
public function addItem(Varien_Object $item)
{
$itemId = $this->_getItemId($item);
if (!is_null($itemId)) {
if (isset($this->_items[$itemId])) {
//throw new Exception('Item ('.get_class($item).') with the same id "'.$item->getId().'" already exist');
}
$this->_items[$itemId] = $item;
} else {
$this->_addItem($item);
}
return $this;
}
}
class MyCompony_MyExtention_Block_Adminhtml_OrderGrid extends Mage_Adminhtml_Block_Widget_Grid
{
public function __construct()
{
parent::__construct();
$this->setId('sales_order_grid');
$this->setUseAjax(true);
$this->setDefaultSort('created_at');
$this->setDefaultDir('DESC');
$this->setSaveParametersInSession(true);
}
protected function _getCollectionClass()
{
return 'sales/order_grid_collection';
}
protected function _prepareCollection()
{
$collection = new Fixed_Order_Grid_Collection();
$select = $collection->getSelect();
$select->join('sales_flat_order_item AS order_item', 'order_item.order_id=main_table.entity_id','quote_item_id',NULL);
$select->distinct();
$this->setCollection($collection);
return parent::_prepareCollection();
}
...
-1
Author: Sajjad Shirazy, 2015-04-15 07:05:38