代码之家  ›  专栏  ›  技术社区  ›  Colin O'Dell

Magento:如何确定客户是否中止了结账过程

  •  1
  • Colin O'Dell  · 技术社区  · 16 年前

    我正在开发一个自定义模块,它需要知道用户是否/何时中止了签出过程。”“中止”只是意味着他们在结帐的索引上着陆,但没有完成这个过程。我知道这是否/何时发生是绝对必要的。

    true ,它将检查正在使用哪个控制器。如果不是收银员,我就知道他们走了。

    我的想法有两个问题:

    1. 我一点也不知道该把这个控制器检查代码放在哪里,这样它就可以在每个页面加载时运行。
    2. 我不知道如何找到哪个控制器正在处理请求。

    如果您能帮我回答这些问题,甚至提出更好的方法,我将不胜感激!

    2 回复  |  直到 16 年前
        1
  •  2
  •   Alana Storm    16 年前

    每次通过添加产品“创建购物车”时,您都在创建一个magento存储在数据库中的Mage\u Sales\u Model\u Quote。每次完成订单时,都会创建一个Mage\u Sales\u Model\u order对象。Mage\u Sales\u Model\u Order对象保留对其原始报价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);
    }
    

    至于你的其他问题,它们太复杂了,无法进入一个单堆栈溢出问题。我想要 read up 在Magento上获得基本架构的感觉,然后使用live Commerce Bug 演示找出你要找的控制器(以上链接的两个项目都是我的、self-link、买家提防等)

        2
  •  0
  •   Colin O'Dell    16 年前

    因为我需要实时知道访问者离开结账台的时间,所以我使用了一个名为 IsUserInCheckout . 设置为 true 当签出的indexAction()执行时。

    到 false

    我觉得它很轻。它确实在每次页面加载时都会运行,但是98%的时间它只是读取会话变量,看到了吗