我在magento平台上开发了在线商店。除了出售目录价格规则外,一切正常。我创建了一个简单的规则,对所有产品适用15%的折扣。当我保存并应用规则时,它整天工作正常。但是在晚上12点之后,销售情况就不再明显了。我尝试通过单击应用规则从管理面板应用规则,但在晚上它甚至不允许我手动应用规则。我可以在第二天早上申请规则并且工作正常但是再次到12点。
我尝试了以下内容。 我已经删除了在产品上单独定义的特价,因此销售仅按价格规则执行。 我已经设置了cron工作,但它也没有在晚上工作。 我已经检查了规则的日期和时间。
我发现可能是因为时间设置。我使用的是GMT + 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
可以轻松实现