Magento目录价格规则在晚上消失

时间:2014-08-13 07:07:03

标签: magento rule

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

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

我发现可能是因为时间设置。我使用的是GMT + 5。有什么办法可以保持规则日夜工作。

由于

5 个答案:

答案 0 :(得分:21)

是的,这是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);

之后你应该能够应用这些规则。

答案 1 :(得分:4)

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

答案 2 :(得分:1)

如上所述,@ Alexei-Zerofezev问题在于索引器。

我也有这个问题,当本地时区的偏移大于+01:00时,问题就出现了。

基本上只是因为magento正在使用gmtTimestamp作为规则日期,在上述情况下,该规则日期是在今天的前一天产生的。

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

答案 3 :(得分:0)

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

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();

答案 4 :(得分:0)

延伸上面的lakshin-karunaratne答案。

确保将您从 catalog_product_index_price_reindex_all 之前的 cataloguerule_apply_all 移至午夜而不是之前。

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

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

使用AOE Scheduler https://github.com/AOEpeople/Aoe_Scheduler

可以轻松实现