Я бы использовал немного другой подход к проблеме брошенной корзины.
Каждый раз, когда вы «создаете корзину», добавляя продукт, вы создаете Mage_Sales_Model_Quote, который magento хранит в базе данных.Каждый раз, когда вы выполняете заказ, вы создаете объект Mage_Sales_Model_Order.Объекты Mage_Sales_Model_Order сохраняют ссылку на свои оригинальные идентификаторы котировок.
Таким образом, вы можете запросить все заказы, чтобы получить список идентификаторов котировок, а затем создать коллекцию котировок и отфильтровать котировки, для которых есть заказы.Это даст вам список каждый раз, когда корзина была заброшена.
//may start to degrade as orders pile up. Add date filters to
//prevent or look into properly joining things in.
$orders = Mage::getModel('sales/order')
->getCollection()
->addAttributeToSelect('*');
var_dump('Order Count', count($orders));
$quote_ids = $orders->getColumnValues('quote_id');
$quote_ids = array_filter($quote_ids, 'is_numeric');
$carts = Mage::getModel('sales/quote')
->getCollection();
var_dump('All Cart Count:');
var_dump(count($carts));
$carts = Mage::getModel('sales/quote')
->getCollection()
->addFieldToFilter('entity_id',array('nin'=>$quote_ids));
var_dump('Filtered Cart Count:');
var_dump(count($carts));
foreach($carts as $cart)
{
var_dump('abandoned cart', $cart);
}
Что касается других ваших вопросов, они слишком сложны, чтобы попасть в один вопрос переполнения стека.Я бы прочитал в Magento, чтобы почувствовать основную архитектуру, а затем использовал бы демонстрацию Commerce Bug , чтобы выяснить, какой контроллер вам нужен.(оба проекта, упомянутые выше, принадлежат мне, самостоятельная ссылка, покупатель остерегается и т. д.)