从哪里开始Magento Shopping Cart Abandonment?

时间:2012-02-10 06:42:41

标签: php magento cron shopping-cart

我正在尝试某种类型的购物车放弃系统与Magento使用它的内置cron模块。我基本上需要的是一个系统,每15分钟检查一次废弃的购物车,如果每个购物车符合某些标准,则会将选择的购物车数据发送到另一个网络服务。

基本上这是我的过程(但可以随意提出更好的方法):

过程

  
      
  1. 获取废弃购物车清单
  2.   
  3. 对于每辆废弃的购物车......   
        
    • 将15(分钟)添加到数据库
    • 中该购物车的abandoned_duration字段   
    • 检查aband_duration是45或1440(1天)还是4320(3天)   
          
      • 如果是,   
            
        • 将购物车信息发送到其他网络服务
        •   
        • 如果aband_duration是4320(3天),   
              
          • 删除废弃的购物车
          •   
        •   
      •   
      • 否则,   
            
        • 继续
        •   
      •   
    •   
  4.   
  5. 使用Magento cron
  6. 每15分钟重复一次   

问题

  
      
  1. Magento可以吗?
  2.   
  3. 使用Magento有更好的流程吗?
  4.   
  5. 实施此步骤需要哪些步骤?例如...   
        
    • 哪些核心模块是必要的?
    •   
    • 需要扩展哪些控制器?
    •   
    • 我应该为此创建自己的模块吗?
    •   
    • 将废弃购物车作为阵列的最佳方法是什么?
    •   
  6.   

我与社区联系的原因是因为Magento文档和教程非常模糊。我是Magento MVC的新手,但我不是PHP,OOP和MVC的新手。

这里的任何指导都会很棒。欢呼声。

2 个答案:

答案 0 :(得分:22)

所有这一切都可以使用Magento完成,但正如你所说,这是一个非常广泛的问题。我将给出具体主题的答案,但我建议您花些时间研究Magento模块开发的基础知识。这是Alan Storm的excellent tutorial(阅读整个系列)。

获取废弃购物车清单

在Magento中,购物车只是sales/quote对象的包装器,因此这是您将要使用的实体。
我建议您只需检查updated_at字段,而不是将增量添加到abandoned_duration属性

$adapter = Mage::getSingleton('core/resource')->getConnection('sales_read');
$minutes = 15;
$from = $adapter->getDateSubSql(
    $adapter->quote(now()), 
    $minutes, 
    Varien_Db_Adapter_Interface::INTERVAL_MINUTE
);
$quotes = Mage::getResourceModel('sales/quote_collection')
    ->addFieldToFilter('converted_at', $adapter->getSuggestedZeroDate())
    ->addFieldToFilter('updated_at', array('to' => $from));

这将为您提供一个尚未更新15分钟的所有报价的集合(将其视为带有方法的数组)。您可以像数组一样迭代它们

foreach ($quotes as $quote) {
    /* @var $quote Mage_Sales_Model_Quote */
}

Magento Cronjobs

在Magento中,所有cron作业都列在配置结构中。首先,您需要将其添加到模块的config.xml中(有关Magento配置的更多信息,请参阅链接的教程)。
这个XML在Magento中注册了一个cronjob。

<crontab>
    <jobs>
        <process_abandoned_carts>
            <schedule>
                <cron_expr>*/15 * * * *</cron_expr>
            </schedule>
            <run>
                <model>your_module/observer::processAbandonedCarts</model>
            </run>
        </process_abandoned_carts>
    </jobs>
</crontab>

现在,每当Magento运行cronjob时,它将实例化类your_module/observer并调用processAbandonedCarts()方法。
为了让Magento处理已配置的cronjobs,您需要将系统设置为执行此操作。它由两部分组成:系统配置和cron作业的触发。

系统配置在 System&gt;下的管理界面中完成。配置&gt;系统&gt; Cron(计划任务)

触发包括设置一种在Magento根目录中定期执行cron.php(或cron.sh)脚本的方法。这可以使用常规crontab条目(man 5 crontab在任何体面的unix系统上完成以获取更多信息)。许多人喜欢的另一个选择是通过curlwget调用执行cron.php脚本,因此处理用户ID与常规Magento用户ID(即Apache用户)匹配。如果配置了APC缓存,这可能很重要,但这是主题 但是,主题是您需要经常调用它,以便它与您在管理界面中指定的设置相匹配
我通常建议每5分钟执行一次cron.php脚本。如果没有安排任何计划,它将直接退出。

使用cronjobs时,Magento的一个非常有用的扩展是Aoe_Scheduler。它为cronjobs和交互功能增加了许多用户界面,应该是核心系统的一部分。

其他

将数据发送到Web服务不是特定于Magento,而是常规PHP,因此我不会详细介绍。

要删除购物车,请在已加载的$quote->delete()实例上简单调用sales/quote

请询问具体问题以获取更多信息。

答案 1 :(得分:0)

这是我的所有活跃的废弃购物车报价

$quotes = Mage::getResourceModel('sales/quote_collection')
        ->addFieldToFilter('converted_at', array('null' => true))
        ->addFieldToFilter('customer_email', array('notnull' => true))
        ->addFieldToFilter('items_count', array('gteq' => 1))
        ->addFieldToFilter('customer_is_guest', array('eq' => 0))
        ->addFieldToFilter('customer_id', array('in' => $this->getCustomerIds()))

        ->addFieldToFilter('is_active', 1)

        //->addFieldToFilter('updated_at', array('to' => $from));
        ;