我正在开发一个自定义模块,需要知道用户是否/何时中止了结帐流程。 “中止”只是意味着他们登陆了结账的indexAction,但没有完成这个过程。我知道这是否/何时发生是绝对必要的。
我在考虑设置一个他们输入结账的会话变量。在每个页面加载时,运行一个代码块来检查此变量。如果true
,它将检查正在使用哪个控制器。如果它不是结账控制器,我会知道他们已离开。
我的想法有两个问题:
如果您能帮助回答这些问题,甚至建议更好的方法,我将不胜感激!
答案 0 :(得分:2)
我对弃车问题略有不同。
每次通过添加产品“创建购物车”时,您都会创建一个Mage_Sales_Model_Quote,magento存储在数据库中。每次完成订单时,您都要创建一个Mage_Sales_Model_Order对象。 Mage_Sales_Model_Order对象保留对其原始报价ID的引用。
因此,您可以查询所有订单以获取报价ID列表,然后创建报价集并筛选出有订单的报价。这将为您提供每次购物车被放弃的清单。
//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上read up了解基本架构,然后使用实时Commerce Bug演示来确定您所追求的控制器。 (与上述相关的项目均为我的,自我链接,买家提防等)。
答案 1 :(得分:0)
由于我需要实时了解访问者离开结账的时刻,我使用了一个名为IsUserInCheckout
的会话变量。当结帐的indexAction()执行时,这将设置为true
。
然后我创建了一个事件观察器,它在将请求分派给控制器之前运行。它检查正在调用哪个控制器。如果请求不是结帐控制器,我会查看会话变量以查看用户是否已启动结帐。运行一些自定义逻辑后,我将会话变量IsUserInCheckout
更改为false
。
我觉得它的重量足够轻。它确实在每个页面加载时运行,但98%的时间它只读取会话变量,看到false
,并且什么都不做。