Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Magento:如何在应用目录规则的情况下获得产品的价格_Magento_E Commerce_Catalog - Fatal编程技术网

Magento:如何在应用目录规则的情况下获得产品的价格

Magento:如何在应用目录规则的情况下获得产品的价格,magento,e-commerce,catalog,Magento,E Commerce,Catalog,我正在开发一个脚本(在Magento之外,不是一个模块),目的是输出所有可用产品的文本列表、它们的价格和一些其他属性。然而,目录价格规则似乎并不适用于产品价格。如果我使用以下任何一项: $_product->getPrice() $_product->getFinalPrice() 我得到的是正常价格(不适用规则) 如果我使用: $_product->getSpecialPrice() 我得到null,除非产品本身插入了特殊价格(即,如果特殊价格与目录规则无关) 我也试过了

我正在开发一个脚本(在Magento之外,不是一个模块),目的是输出所有可用产品的文本列表、它们的价格和一些其他属性。然而,目录价格规则似乎并不适用于产品价格。如果我使用以下任何一项:

$_product->getPrice()
$_product->getFinalPrice()
我得到的是正常价格(不适用规则)

如果我使用:

$_product->getSpecialPrice()
我得到null,除非产品本身插入了特殊价格(即,如果特殊价格与目录规则无关)

我也试过了

Mage::getModel('catalogrule/rule')->calcProductPriceRule($product,$product->getPrice())
正如Fabian Blechschmidt给出的答案所示,但有趣的是,只有当产品受到任何目录规则的影响时,它才会返回正常价格,否则返回null

一段时间以前,在中也有类似的问题,但提供的答案(即插入下面的代码)对我不起作用(返回的价格保持不变)

有人知道如何做到这一点吗

我正在使用Magento 1.6.2.0。
提前感谢。

感谢您,我找到了一个新网站:

他们提到:

Mage::getModel('catalogrule/rule')->calcProductPriceRule($product,$product->getPrice())

HTH

由于目录价格规则严重依赖于时间、门店和拜访客户,因此当您想要检索应用了价格规则的产品最终价格时,需要设置这些参数

因此,在您的情况下,请确保提供的产品带有所需的门店和客户组id,可以设置为:

Mage::getModel('catalogrule/rule')->calcProductPriceRule($product->setStoreId('STORE_ID')->setCustomerGroupId('CUSTOMER_GROUP_ID'),$product->getPrice())

我发现了这个问题。折扣价格在商店前端显示Ok。问题是,我正在开发Magento的“外部”脚本(因此不是Magento模块),类似于:

<?php

set_time_limit(0);
ignore_user_abort();
error_reporting(E_ALL^E_NOTICE);
header("Content-Type: text/plain; charset=utf-8");

require_once "app/Mage.php";

// Get default store code
$default_store = Mage::app()->getStore();
...

谢谢大家的意见。

这对我在这一问题上有所帮助: . Jernej的解决方案似乎可行,但它不处理通过使用“停止处理”覆盖其他规则的规则,因此可以应用多个规则

$original_price = $_product->getPrice();
$store_id = 1; // Use the default store
$discounted_price = Mage::getResourceModel('catalogrule/rule')->getRulePrice( 
                        Mage::app()->getLocale()->storeTimeStamp($store_id), 
                        Mage::app()->getStore($store_id)->getWebsiteId(), 
                        Mage::getSingleton('customer/session')->getCustomerGroupId(), 
                        $_product->getId());

// if the product isn't discounted then default back to the original price
if ($discounted_price===false) {
    $discounted_price=$original_price;
}

嗨,谢谢你的回答(我在搜索中错过了那个网站)。这似乎正是我需要的,但它不起作用:返回的价格与原始价格相同(如果产品不受任何规则的影响,它根本不会返回任何价格,尽管后者可以很容易解决)。我在看Mage_CatalogRule_Model_Rule和相关类的代码,它似乎做了我想要的,但它没有。我还尝试刷新缓存、重新索引等,但结果总是一样的。再次感谢。请尝试预先加载产品$\u product->load($\u product->getId()),如果这样做有效,则会丢失一个属性。不要停止这一点。查看缺少的属性并将其添加到集合中。您发布的代码看起来像view.phtml或其他东西,然后您可以在后端更改属性设置。我尝试使用此方法,但出现了以下错误:无效方法Mage\u CatalogRule\u Model\u Rule::calcProductPriceRule我可以在那里做什么?我认为您的magento版本太旧了。您可以在其中一个magento镜像中查找它,例如,即使在填写groupId、storeId之后,这也不可用。特别是如果您使用“停止进一步的规则处理”。最好的解决方案是从Augsteyer获得的信息,也许还有其他一些事情涉及到您的数据或索引。在禁用所有自定义模块的情况下,折扣价格是否在默认主题中按预期显示?是的,折扣价格在前端显示为Ok。问题是这不是一个Magento模块,而是一个“外部”脚本。Magento似乎加载了所有正常工作所需的额外内容。换句话说,Magento中的所有内容都必须是一个模块…“Magento中的所有内容都必须是一个模块”-不是真的。然而,当应用程序执行时,有许多模块以多种方式进行交互。我会检查
Mage\u CatalogRule\u Model\u Observer
是否正在实例化。也许您应该粘贴远程脚本的相关部分(
Mage::app()
实例化,
loadAreaPart()
调用,产品加载等)。是的,您是正确的,只需将“必须真的”替换为“应该”或“如果”可能更容易。谢谢你的意见。虽然法肯的答案是正确的。如果你想成为一个叛逆者,这确实有效。非常感谢。我的问题是Lengow提要导出扩展的Cronjob没有正确考虑价格导出的目录规则。将setCustomerGroupId()应用于产品实例后,效果良好。我认为这个解决方案比通过Mage::app()->loadAreaPart()等模拟商店前端要好得多。
$_product->getPrice()
$_product->getFinalPrice()
$_product->getSpecialPrice()
$original_price = $_product->getPrice();
$store_id = 1; // Use the default store
$discounted_price = Mage::getResourceModel('catalogrule/rule')->getRulePrice( 
                        Mage::app()->getLocale()->storeTimeStamp($store_id), 
                        Mage::app()->getStore($store_id)->getWebsiteId(), 
                        Mage::getSingleton('customer/session')->getCustomerGroupId(), 
                        $_product->getId());

// if the product isn't discounted then default back to the original price
if ($discounted_price===false) {
    $discounted_price=$original_price;
}