19

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

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

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

私が使用する場合:

$_product->getSpecialPrice()

製品自体に特別価格が実際に挿入されていない限り (つまり、特別価格がカタログ ルールに関連していない場合)、無効になります。

私も試しました

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

Fabian Blechschmidt の回答で示唆されているように、興味深いことに、製品がカタログ ルールの影響を受けている場合にのみ通常の価格を返し、それ以外の場合はnullを返します。

少し前にStackOverflowMagento Forumsで同様の質問がありましたが、提供された回答 (以下のコードを挿入すること) はうまくいきません (返される価格は同じままです)。

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

これを達成する方法を知っている人はいますか?

Magento 1.6.2.0 を使用しています。前もって感謝します。

4

4 に答える 4

20

あなたのおかげで、新しいサイトを見つけました: http://www.catgento.com/magento-useful-functions-cheatsheet/

そして彼らは次のように述べました:

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

HTH

于 2012-12-30T20:25:34.560 に答える
12

問題を発見しました。割引価格は、ストアのフロントエンドに [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();
...

すべてが適切に機能するには、適切な Magento ブートストラップに従い、すべてをモジュールとして開発する必要があるようです。私のスクリプトは非常に単純だったので、完全なモジュールをコーディングする必要はないと思いました。つまり、Magento のすべてが実際にはモジュールである必要があります。

結論として、モジュール アプローチを使用すると、すべてのメソッドが期待どおりに機能します。

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

ご意見をお寄せいただきありがとうございます。

于 2012-12-31T02:57:48.420 に答える
12

カタログの価格ルールは、時間、店舗、および訪問する顧客に大きく依存するため、価格ルールが適用された製品の最終価格を取得する場合は、これらのパラメーターを設定する必要があります。

したがって、あなたの場合、提供された製品が目的のストアと顧客グループ ID で渡されることを確認してください。これは次のように設定できます。

Mage::getModel('catalogrule/rule')->calcProductPriceRule($product->setStoreId('STORE_ID')->setCustomerGroupId('CUSTOMER_GROUP_ID'),$product->getPrice())
于 2012-12-31T00:12:38.497 に答える
12

これは、この問題で私を助けました: 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;
}
于 2013-04-23T23:11:43.133 に答える