2012-12-30 28 views
16

利用可能なすべての製品、価格、その他の属性のテキストリストを出力するためのスクリプト(モジュールではなくMagentoの外部)を開発しています。しかし、カタログ価格ルールは製品価格に適用されていないようです。次のいずれかを使用した場合:Magento:カタログルールが適用された製品の価格を取得する方法

通常の価格(ルールは適用されません)を取得します。

私が使用している場合:

$_product->getSpecialPrice() 

製品が実際に(特別価格はカタログのルールと関連していない場合、すなわち)製品自体に挿入された特別価格を持っていない限り、私はヌルを取得します。

ファビアンBlechschmidtによって与えられた答えで提案されているように、私も

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

を試してみましたが、興味深いことに、それはそうでない場合はヌルを返して、製品がどのカタログルールの影響を受けている場合にのみ、通常の価格を返します。

少し前にStackOverflowMagento Forumsに似たような質問がありましたが、答えが返ってきました(戻り値は同じです)。

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

これを達成する方法のアイデアはありますか?

私はMagento 1.6.2.0を使用しています。 ありがとうございます。あなたに

+2

おそらく、あなたのデータや索引付けに関係することがあります。すべてのカスタムモジュールが無効になっている既定のテーマで期待どおりの割引価格が表示されますか? – benmarks

+0

はい、割引価格はフロントエンドでOkを表示します。問題はこれがMagentoモジュールではなく、「外部」スクリプトであることでした。 Magentoは、すべてが正しく動作するために必要な追加のものをロードするようです。言い換えれば、Magentoのすべてが本当にモジュールでなければなりません... – faken

+1

* "Magentoのすべてが本当にモジュールでなければなりません" * - 実際はありません。しかし、アプリが実行されているときには、多くの方法でやりとりする多くのモジュールがあります。 'Mage_CatalogRule_Model_Observer'がインスタンス化していることを確認します。リモートスクリプト( 'Mage :: app()'インスタンシエーション、 'loadAreaPart()'呼び出し、製品ロードなど)の関連部分を貼り付ける必要があります。 – benmarks

答えて

10

。割引価格は、ストアのフロントエンドで[OK]を表示します。問題は、私は、Magentoの(したがってないMagentoのモジュール)に「外部」のスクリプトを開発していたということでした、のようなもの:

すべてが、1が適切な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(); 
... 

すべてをモジュールとして。私のスクリプトはとてもシンプルで、完全なモジュールをコーディングする必要はないと思っていました。言い換えれば、Magentoのすべてが本当にモジュールでなければなりません。

結論は、モジュールアプローチを使用して、すべてのメソッドは、期待どおりに動作:

$_product->getPrice() 
$_product->getFinalPrice() 
$_product->getSpecialPrice() 

がご入力ありがとうございました。

18

おかげで、私は新しいサイトが見つかりました: http://www.catgento.com/magento-useful-functions-cheatsheet/

をそして、彼らは言及:

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

HTH

+0

こんにちは、感謝の答え(私は自分の検索でそのウェブサイトを逃した)。それは私が必要としているものと思われますが、うまくいきません。返品価格は元の価格と同じです(そして、後で簡単に解決できるものの、製品がいかなるルールによっても影響を受けないならば、いかなる価格も返しません)。私はMage_CatalogRule_Model_Ruleと関連するクラスのコードを見ていますが、私が望むことをするようですが、そうではありません。私はまたキャッシュ、再インデックスなどをフラッシュしようとしましたが、結果は常に同じです。もう一度ありがとう。 – faken

+0

これが機能する場合、$ _product-> load($ _ product-> getId())をあらかじめロードしようとすると、属性が欠落します。この時点でDONT STOPは帽子をはずします。見つからない属性を探してコレクションに追加します。投稿したコードはview.phtmlなどのように見えますが、バックエンドの属性設定を変更するだけで済みます。 –

+0

私はこれを使用しようとしましたが、このエラーが発生しました: 無効なメソッドMage_CatalogRule_Model_Rule :: calcProductPriceRule 私はそこで何ができますか? – Klettseb

9

をカタログ価格ルールが重く、時間、店舗や訪問客に依存しているように、価格ルールを適用して製品の最終価格を取得する場合は、これらのパラメータを設定する必要があります。

だから、あなたの場合には、提供される製品は以下のように設定することができます希望店舗と顧客グループID、と渡されていることを確認してください:私は、問題を発見し

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

それは働いた。ありがとう。 –

+0

ありがとうございました。 Lengow Feed ExportエクステンションのCronjobは、価格の輸出に関してカタログルールを正しく考慮していなかったという問題がありました。製品インスタンスにsetCustomerGroupId()を適用すると、うまくいきました。 私はこのソリューションがMage :: app() - > loadAreaPart()などのストアフロントエンドをシミュレートする方がはるかに良いと思います。 –

10

これはこの問題で私を助けました:http://www.magentocommerce.com/boards/viewthread/176883/ 。 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; 
} 
+0

fakenの答えは正しい方法ですが。あなたが反逆者になりたいなら、これはうまくいく。 –

関連する問題