0

問題

バックエンドまたはcronタスク(ユーザーの要求またはcronイベントで実行されるカスタム製品フィードジェネレーターなど)で、通常はフロントエンドから外れている間、Mage_Catalog_Model_ProductのメソッドgetFinalPrice()は、たとえば、製品の基本価格を返します。 、その製品に適用されるMagentoカタログ価格ルール。

これは、生成されたフィードでエクスポートされた価格がMagentoフロントエンドで表示されたものと同じではないことを意味し、これは簡単に問題になる可能性があります。

では、フロントエンドに表示される製品の最終価格を取得するにはどうすればよいですか?

4

2 に答える 2

4

質問をした人が述べた解決策は、この行を上に追加した場合にのみ管理サイトで機能します。

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

これにより、管理サイトで定義されたカタログ価格ルールを考慮したフロントエンドイベントが読み込まれます。

それが将来誰かに役立つことを願っています。

于 2013-01-08T15:00:46.897 に答える
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クラスのインスタンスです。

于 2012-09-05T16:57:02.010 に答える