php - Magento 购物车放弃从哪里开始?

标签 php magento cron shopping-cart

我正在尝试使用 Magento 的某种类型的购物车放弃系统,使用它的内置 cron 模块。我基本上需要的是一个系统,它每 15 分钟检查一次废弃的购物车,并在每个购物车满足特定条件时将选择的购物车数据发送到另一个网络服务。

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

过程

  1. Get list of abandoned carts
  2. For each abandoned cart...
    • Add 15 (mins) to that cart's abandoned_duration field in database
    • Check if the abandoned_duration is at 45 or 1440 (1 day) or 4320 (3 days)
      • If yes,
        • send cart information to another web service
        • If abandoned_duration is at 4320 (3 days),
          • Delete abandoned cart
      • Else,
        • continue
  3. Repeat every 15 mins using Magento cron

问题

  1. Is this possible in Magento?
  2. Is there a better process to do this using Magento?
  3. What are the steps needed to go about implementing this? For example...
    • Which core modules are necessary?
    • Which controllers need to be extended?
    • Should I create my own module for this?
    • What is the best way to get abandoned shopping carts as an array?

我接触社区的原因是因为 Magento 文档和教程非常模糊。我是 Magento MVC 的新手,但我对 PHP、OOP 和 MVC 并不陌生。

这里的任何指导都会很出色。干杯。

最佳答案

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

获取废弃购物车列表

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

$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 定时任务

在 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 作业的触发。

系统配置在系统 > 配置 > 系统 > 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,所以我不会详细介绍。

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

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

关于php - Magento 购物车放弃从哪里开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9223790/

相关文章:

php - 在 crontab 中运行 PHP 脚本仅在导出到文件时有效

linux - 每天在特定时间执行一个shell脚本

php - 使用从 mysql 选定列结果发出的 PHP 值生成文件 TXT 文件

mysql - 如何使用 SQL 从单独的表中检索 'postcode'

magento - Paypal Helper 升级后无法加载,页面空白

php - 从 Magento 中的发票 pdf 中删除运输方式和付款方式

php - 没有cron的计划PHP脚本执行

php - Laravel migrate - 一次完成多个迁移(文件)

php - 版本 3 中的 behat 格式化程序

php - WordPress 插件模板覆盖 - 作品集