【问题标题】:Magento catalog price rule disappears at nightMagento 目录价格规则在晚上消失
【发布时间】:2014-08-13 07:07:03
【问题描述】:

我在magento平台上开发了在线商店。除了销售目录价格规则外,一切正常。我创建了对所有产品应用 15% 折扣的简单规则。当我保存并应用规则时,它一整天都可以正常工作。但是在晚上 12 点之后,销售就不再可见了。我尝试通过单击应用规则从管理面板应用规则,但在晚上它甚至不允许我手动应用规则。我可以在第二天早上应用该规则,它可以正常工作,但又要到凌晨 12 点。

我尝试了以下方法。 我已经删除了在产品上单独定义的特价,因此销售仅按价格规则执行。 我已经设置了 cron 作业,但它在晚上也不起作用。 我已经检查了规则的日期和时间。

我发现这可能是因为时间设置。我正在使用 GMT+5。有什么办法可以让这条规则在白天和黑夜都有效。

谢谢

【问题讨论】:

    标签: magento rule


    【解决方案1】:

    是的,这是 Magento 中的一个错误(或一些超出我理解的逻辑)。当 Magento 在前端显示产品时,它会检查该日期是否有目录规则。用于此检查的日期是您当地的日期,因此在您的情况下为 GMT+5。但是,在应用目录规则时,它使用 GMT 日期。这意味着您在凌晨 5 点之前无法应用规则。

    问题出在Mage_CatalogRule_Model_Action_Index_Refresh::execute() 方法中。您必须在扩展中或通过文件的本地版本重写此函数/类。

    文件位置:app/code/core/Mage/CatalogRule/Model/Action/Index/Refresh.php

    你必须替换第 121 行:

    $timestamp = $coreDate->gmtTimestamp('Today');
    

    用这一行:

    $timestamp = Mage::app()->getLocale()->date(null, null, null, true)->get(Zend_Date::TIMESTAMP);
    

    之后你应该可以应用规则了。

    【讨论】:

    • 感谢您的回复。通过创建本地版本,您的意思是在 app/code/local/Mage 中创建相同的层次结构吗?
    • 是的,完全正确。这不是 Magento 修改最健康的方式,但却是最简单的方式。
    • 是的。我应用了解决方案,效果很好。价格规则在 12 点后保持启用。谢谢一百万。
    • 能否请您将路径指向原始文件的位置?
    • Magento 1.8+ 的路径是 app/code/core/Mage/CatalogRule/Model/Action/Index/Refresh.php。如果您有较旧的 Magento 版本,那么恐怕这个解决方案对您没有帮助。
    【解决方案2】:

    在 magento 1.9.2.2 中,这对我不起作用。我安装了 AOE 调度程序并使用它我将 catalogrule_apply_all cron 表达式从 0 1 * * * 更改为 30 */6 * * * 并开始工作。希望这可以帮助某人。

    【讨论】:

      【解决方案3】:

      正如@Alexei-Zerofezev 所说,问题出在索引器上。

      我也遇到过这个问题,当本地时区的偏移量大于 +01:00 时就会出现问题。

      基本上只是因为 magento 使用 gmtTimestamp 作为规则日期,在上述情况下导致前一天。

      为此我开发了一个小模块https://github.com/Chuvisco88/Chuvisco_CatalogRuleFix 来解决这个问题。 如果有人遇到过这个问题,请尝试一下。

      【讨论】:

      • 感谢您的模块。我有同样的问题,它完美地解决了它。再次非常感谢你,你是我本周的英雄 :-)
      【解决方案4】:

      我使用了一个 shell 脚本,而不是 @Lakshin Karunaratne 建议的(巨大的)AOE 页面。

      require_once 'abstract.php';
      
      class X043_Shell_PriceRuleSetter extends Mage_Shell_Abstract
      {
          public function run()
          {
              // stuff and thingies
              umask(0);
              Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
              setlocale(LC_ALL, 'en_US.UTF-8'); 
      
              try {
                  Mage::getModel('catalogrule/rule')->applyAll();
                  Mage::getModel('catalogrule/flag')->loadSelf()
                      ->setState(0)
                      ->save();
              } catch (Mage_Core_Exception $e) {
                  Mage::logException($e);
              } catch (Exception $e) {
                  Mage::logException($e);
              }
      
              return $this;
          }
      }
      
      $shell = new X043_Shell_PriceRuleSetter();
      $shell->run();
      

      【讨论】:

        【解决方案5】:

        扩展了上面的 lakshin-karunaratne 答案。

        确保将 cataloguerule_apply_all 移到午夜之后,但不要早于 catalog_product_index_price_reindex_all

        来自“解决 Magento”
        “重要的是,规则价格必须在当天目录价格重新索引开始之前计算。否则观察者将不会获得任何有效的规则价格来增加价格指数。”

        因此,您需要计算与 GMT 时间的偏移量,以确保 cataloguerule_apply_allcatalog_product_index_price_reindex_all 在同一天执行。

        这可以通过使用AOE调度器https://github.com/AOEpeople/Aoe_Scheduler轻松实现

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-05-26
          • 1970-01-01
          • 2014-06-18
          • 1970-01-01
          • 2014-06-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多