Magento:如何在前端之外检索产品最终价格(考虑目录价格规则等)

时间:2012-09-05 16:57:02

标签: php api magento backend catalog

问题

在backend o cron任务中(例如,在用户请求或cron事件上运行的自定义产品Feed生成器中),并且通常在前端之外,Mage_Catalog_Model_Product的方法getFinalPrice()返回产品的基本价格,而不考虑帐户例如,适用于该产品的Magento目录价格规则。

这意味着在生成的Feed中导出的价格与Magento前端中显示的价格不同,这很容易成为问题。

那么,如何在前端展示产品的最终价格呢?

2 个答案:

答案 0 :(得分:4)

提出问题的人所说的解决方案仅适用于管理网站,如果您将此行添加到顶部:

Mage::app()->loadAreaPart(Mage_Core_Model_App_Area::AREA_FRONTEND,Mage_Core_Model_App_Area::PART_EVENTS);

这会加载前端事件,该事件会考虑管理站点上定义的目录价格规则。

希望将来帮助某人。

答案 1 :(得分:1)

<强>解

使用辅助类,定义了以下方法:

class My_Package_Helper_Price extends Mage_Core_Helper_Abstract {
  private $_init_rule = false;

  private function initRuleData($product) {
    if ($this->_init_rule || empty($product)) return $this;
    $productStore = Mage::getModel('core/store')->load($product->getStoreId());
    if (!empty($productStore)) {
      Mage::register('rule_data', new Varien_Object(array(
        'store_id'  => $product->getStoreId(),
        'website_id'  => $productStore->getWebsiteId(),
        'customer_group_id' => 0, // NOT_LOGGED_IN
      )));
      $this->_init_rule = true;
    }
    return $this;
  }

  public function getProductFinalPrice($product) {
    $this->initRuleData($product);
    return $product->getFinalPrice();
  }

}

然后,您可以使用:

Mage::helper('my_package/price')->getProductFinalPrice($product);

其中$ product是Mage_Catalog_Model_Product类的加载实例。