2

「パーセント」価格タイプを組み込んだカスタム オプションで実際に問題が発生しています。

シンプルな製品では、パーセント ベースのカスタム オプションは期待どおりに機能しますが、構成可能またはバンドルでは、最終的な価格は基本価格 + 追加オプションではなく、基本価格から決定されます (これはビジネス要件によって決まります)。

Config/Bundle Product

base price = $1000
option 1 + $100 
option 2 + 5%
_____________________________
= $1150 (instead of $1155);

この大きな問題に対処するものはほとんど見つかりませんでした。

私はこの Answerを見つけて実装しましたが、$finalPrice返されMage_Catalog_Model_Product_Type_Price -> _applyOptionsPriceた値は基本価格 + カスタム オプションの追加料金を正しく評価していません。さらに、フロントエンドでは Products.Options、ソリューションでも基本料金が計算に組み込まれていません。修正は以前のバージョンの magento 用であると想定しています (私は v1.11 を使用しています)。

修正の戦略は正しいと思いますが、非常に複雑なインターチェンジであり、この問題に対処するために何を変更する必要があるかは完全にはわかりません。

どんな考えでも大歓迎です。

乾杯


アップデート

私はフロント エンドで少し成功しました (javascript を取得してオプション値と価格を正しく更新します)。ただし、これらの変更は価格モデルに書き込まれません。たとえば、ショッピング カートがレンダリングされると、最終価格には完全に読み込まれた価格ではなく、親製品の割合が組み込まれます。

これが私がバックエンドに持っているものです(これは動作を変更していません。アプリ/ローカルディレクトリatmにコピーしたばかりですが、このロジックが解決したら適切にオーバーライドします.

Mage_Catalog_Model_Product_Type_Price

    public function getFinalPrice($qty=null, $product)
    {
        //... aggregate tier and special pricing, then apply custom options

        $finalPrice = $product->getData('final_price');
        $finalPrice = $this->_applyOptionsPrice($product, $qty, $finalPrice);

        return max(0, $finalPrice);
    }

    protected function _applyOptionsPrice($product, $qty, $finalPrice)
    {
        if ($optionIds = $product->getCustomOption('option_ids')) {
            $basePrice = $finalPrice;
            foreach (explode(',', $optionIds->getValue()) as $optionId) {
                if ($option = $product->getOptionById($optionId)) {

                    $confItemOption = $product->getCustomOption('option_'.$option->getId());
                    $group = $option->groupFactory($option->getType())
                        ->setOption($option)
                        ->setConfigurationItemOption($confItemOption);
                    // grab option value based on finalprice 
                    $finalPrice += $group->getOptionPrice($confItemOption->getValue(), $finalPrice);
                }
            };
        }

        Mage::log('base price :'.$basePrice.'  final price :'.$finalPrice); 

        return $finalPrice;
    }

私が知る限り、Mage_Catalog_Model_Product_Type_Configurable_PriceMage_Catalog_Model_Product_Type_Grouped_PriceParent::getFinalPriceでは、各ステップで値を決定するためにそれぞれを呼び出すため、オーバーライドするものは何もありません...

疑問が残ります - パーセンテージベースのカスタムオプションに対応するために価格モデルを変更するにはどうすればよいですか??

私がこれを解決するのを手伝ってくれる人に50ポイント。...

誰?

4

1 に答える 1

0

私があなたを正しければ、構成可能でグループ化された製品が必要であり、次のオプション価格の変更はそれぞれ、前に計算された値に適用する必要があります (前のオプション価格の変更を適用した後)。この場合、次の方法でとクラス_applyOptionsPrice()の両方でメソッドをオーバーライドする必要があります。Mage_Catalog_Model_Product_Type_Configurable_PriceMage_Catalog_Model_Product_Type_Grouped_Price

protected function _applyOptionsPrice($product, $qty, $finalPrice)
{
    if ($optionIds = $product->getCustomOption('option_ids')) {
        foreach (explode(',', $optionIds->getValue()) as $optionId) {
            if ($option = $product->getOptionById($optionId)) {
                $confItemOption = $product->getCustomOption('option_'.$option->getId());

                $group = $option->groupFactory($option->getType())
                    ->setOption($option)
                    ->setConfigurationItemOption($confItemOption);
                $finalPrice += $group->getOptionPrice($confItemOption->getValue(), $finalPrice);
            }
        }
    }

    return $finalPrice;
}
于 2012-09-27T22:54:35.557 に答える