価格表の段階的な価格設定
-
13-12-2019 - |
質問
1 つの特定の製品の (フロントページに) 価格表を探していますが、3 つの異なる (事前定義された) 数量があります。
製品を表示し、ページに正しい「カートに追加」リンクを表示するのは比較的簡単でした。
$_productId = '498';
$_product = Mage::getModel('catalog/product')->load($_productId);
$_url = Mage::helper('checkout/cart')->getAddUrl($_product);
税金、通貨、一部の書式設定を含む数量 1 の価格を取得するのも簡単です。
$_price = Mage::helper('core')->currency(Mage::helper('tax')->getPrice($_product, $_product->getFinalPrice()));
この結果、 <span class="price">€15,00</span>
ただし、私の目標は次のような価格表を作成することです。
┌───────────┬───────────┬───────────┐
│ Single │ ValuePack │ FamilyPack│
├───────────┼───────────┼───────────┤
│ €15 │ €10 │ €7.50 │
├───────────┼───────────┼───────────┤
│ Qty 1 │ Qty 5 │ Qty 10 │
└───────────┴───────────┴───────────┘
Qty * X の価格を取得することも難しくありませんでした。
$_qty = 5;
$_price = Mage::helper('core')->currency(Mage::helper('tax')->getPrice($_product, $_product->getFinalPrice($_qty)));
予想どおり、この結果は次のようになります <span class="price">€10,00</span>
ただし、$_qty を変更しても、他の 2 つの価格の出力は常に最初の価格と同じになります。
図:
$_price_1 = Mage::helper('core .... $_product->getFinalPrice(1)));
結果として €15
$_price_2 = Mage::helper('core .... $_product->getFinalPrice(5)));
結果として €15
同じように
$_price_3 = Mage::helper('core .... $_product->getFinalPrice(10));
結果として €15
同じように
これは、Magento が最初の検索後に製品価格をキャッシュすることに関係があると思います。
このテーブルを正しい方法で作成する方法を知っている人はいますか?
解決
これは配列で利用できるため、階層価格を取得するのはそれほど難しくないことがわかりました。 $_product->getFormatedTierPrice()
(スペルが間違っていることに注意してください!)。
この配列は次のようになります。
Array ( [32000-2] => Array ( [price_id] => 50 [website_id] => 4 [all_groups] => 1 [cust_group] => 32000 [price] => 21.95 [price_qty] => 2.0000 [website_price] => 24.95 [formated_price] => € 18,95 ) [32000-4] => Array ( [price_id] => 52 [website_id] => 4 [all_groups] => 1 [cust_group] => 32000 [price] => 23.95 [price_qty] => 4.0000 [website_price] => 23.95 [formated_price] => € 17,95 ) [32000-10] => Array ( [price_id] => 56 [website_id] => 4 [all_groups] => 1 [cust_group] => 3200024.95 [price] => 22.95 [price_qty] => 10.0000 [website_price] => 22.95 [formated_price] => € 16,95 ) [32000-25] => Array ( [price_id] => 57 [website_id] => 4 [all_groups] => 1 [cust_group] => 32000 [price] => 19.95 [price_qty] => 25.0000 [website_price] => 21.95 [formated_price] => € 15,95 ) [32000-50] => Array ( [price_id] => 58 [website_id] => 4 [all_groups] => 1 [cust_group] => 32000 [price] => 19.95 [price_qty] => 50.0000 [website_price] => 19.95 [formated_price] => € 14,95 ) )
この多次元配列から必要なのは 2 つの項目だけです。[price_qty] と [formated_price]。
したがって、次のコードが完成しました。
$_productId = '498';
$_product = Mage::getModel('catalog/product')->load($_productId);
$_single = Mage::helper('core')->currency(Mage::helper('tax')->getPrice($_product, $_product->getFinalPrice())); // Just the single product price
$_prices = array_column($_product->getFormatedTierPrice(), 'formated_price', 'price_qty'); // Extract price_qty and formated_price from Array of formatted tier prices
そして、私の価格表には次のようになりました。
<li class="price">
<?php
$_qty = '10.0000';
if (array_key_exists($_qty, $_prices)) {
echo $_prices[$_qty];
} else {
echo $_single;
}
?>
</li>
と else { echo $_single;}
誰かがバックエンドで階層数量を変更した場合 (階層数量は現在 phtml にハードコードされています)、価格をまったく出力しないのではなく、少なくとも単一の製品の価格を出力するようにします。