我正在尝试某种类型的购物车放弃系统与Magento使用它的内置cron模块。我基本上需要的是一个系统,每15分钟检查一次废弃的购物车,如果每个购物车符合某些标准,则会将选择的购物车数据发送到另一个网络服务。
基本上这是我的过程(但可以随意提出更好的方法):
- 获取废弃购物车清单
- 对于每辆废弃的购物车......
- 将15(分钟)添加到数据库
中该购物车的abandoned_duration字段- 检查aband_duration是45或1440(1天)还是4320(3天)
- 如果是,
- 将购物车信息发送到其他网络服务
- 如果aband_duration是4320(3天),
- 删除废弃的购物车
- 否则,
- 继续
- 使用Magento cron
每15分钟重复一次 醇>
- Magento可以吗?
- 使用Magento有更好的流程吗?
- 实施此步骤需要哪些步骤?例如...
醇>
- 哪些核心模块是必要的?
- 需要扩展哪些控制器?
- 我应该为此创建自己的模块吗?
- 将废弃购物车作为阵列的最佳方法是什么?
我与社区联系的原因是因为Magento文档和教程非常模糊。我是Magento MVC的新手,但我不是PHP,OOP和MVC的新手。
这里的任何指导都会很棒。欢呼声。
答案 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中,所有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系统上完成以获取更多信息)。许多人喜欢的另一个选择是通过curl
或wget
调用执行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));
;