web-dev-qa-db-ja.com

Magentoの構成可能な製品オプションで価格差を実際の価格に置き換える

3つのオプションを備えた構成可能な製品があります。以下を参照してください。

enter image description here

+£24.00と+£75.00を実際の商品の価格に置き換えたいと思います。

したがって、代わりに次のようになります:£69.00と£120.00

js/varien/product.jsにあるコードを見つけました

コードを切り刻んで変更するのに少し時間を費やしましたが、何を変更する必要があるのか​​を完全に理解することはできません。このファイルの240行目以降は、構成可能な製品のJavaScriptイベントを処理します。

ここで助けていただければ幸いです。

17
Adam Moss

これはjavascriptによって実行されます。 js/varien/configureurable.jsのメソッドgetOptionLabelを変更する必要があります(これはMagento 1.5.1.0であり、使用しているバージョンによってマイレージが異なる場合があります)。

このメソッドは、オプションと適用される価格differenceを受け取ります。さまざまなオプションの絶対価格だけを表示したい場合は、構成可能な製品の絶対基本値とオプションの絶対差を使用して、自分でそれらを計算する必要があります。

メソッドの最初の数行は次のようになります。

getOptionLabel: function(option, price){
    var price = parseFloat(price);

これを変更して、オプションの絶対基本価格と絶対差を取得します。次に、それらを合計して、オプションの最終的な絶対価格を取得します。このような:

getOptionLabel: function(option, price){
    var basePrice = parseFloat(this.config.basePrice);
    // 'price' as passed is the RELATIVE DIFFERENCE. We won't use it.
    //  The ABSOLUTE DIFFERENCE is in option.price (and option.oldPrice)
    var absoluteDifference = parseFloat(option.price);
    var absoluteFinalPrice = basePrice + absoluteDifference;
    // var price = parseFloat(price);
    var price = absoluteFinalPrice;

次に、オプションの+記号と-記号を削除する必要があります。後で同じメソッドでthis.formatPriceを呼び出すときは、各呼び出しで2番目のパラメーターをfalseに変更するだけです。

    if(price){
        if (this.taxConfig.showBothPrices) {
            str+= ' ' + this.formatPrice(excl, false) + ' (' + this.formatPrice(price, false) + ' ' + this.taxConfig.inclTaxTitle + ')';
        } else {
            str+= ' ' + this.formatPrice(price, false);
        }  

これに関するいくつかのメモ:

Js/varien /product.jsにProduct.Configと呼ばれる別の同一のオブジェクトが作成されています。私の知る限り、これはjs/varien/configureurable.jsに置き換えられているため、まったく何もしません。

また、js/varien/configureurable.jsを変更するだけでは、次にMagentoをアップグレードするときに、変更が失われる可能性があります。 js/varien/my_configurable.jsなどの別のファイルを作成し、使用しているテーマの構成ファイル(product.xml)で呼び出すことをお勧めします。

21
Greg Robbins

Magento 1.9では、.jsメソッドが機能しなくなったようです。

代わりに、Abstract.php(/app/code/core/Mage/Catalog/Block/Product/View/Options/Abstract.php)を更新し、このファイルを/ app/code/local/Mage/Catalog/Block/Product /にコピーします。 View/Options /Abstract.php。 128行目で、$ _ priceInclTax変数と$ _priceExclTax変数を次のように変更します。

$_priceInclTax = $this->getPrice($sign.$value['pricing_value'], true)+$this->getProduct()->getFinalPrice();

$_priceExclTax = $this->getPrice($sign.$value['pricing_value'])+$this->getProduct()->getFinalPrice();

私は同様の解決策を見てきましたが、これは、ネガティブな製品オプションや特別価格の割引などでも機能することを保証する唯一の方法です。

4

この拡張機能は役立つかもしれません、私は過去にそれを使用しました(そしてそれは維持されているようです):

http://www.magentocommerce.com/magento-connect/Matt+Dean/extension/596/simple-configurable-products

4
thaddeusmt

解決策が見つかりました ここ Magento 1.9で動作しますが、コアコードをオーバーライドするため、コアをオーバーライドしないようにする必要があります。

私は新しいjsファイルでこのようなことを試しましたが、どういうわけかコアのconfigurable.jsが台無しになり、誰かがidがそうしない方法を思い付く可能性があります。

Product.Config.prototype.getOptionLabel  = Product.Config.prototype.getOptionLabel.wrap(function(parentMethod){
// BEGIN:: custom price display update
var basePrice = parseFloat(this.config.basePrice);
// 'price' as passed is the RELATIVE DIFFERENCE. We won't use it.
//  The ABSOLUTE DIFFERENCE is in option.price (and option.oldPrice)
var absoluteDifference = parseFloat(option.price);
// var price = parseFloat(price);
if(absoluteDifference){
    // console.log(option);
    price = basePrice + absoluteDifference;
} else {
    price = absoluteDifference;
}
// END:: custom price display update

if (this.taxConfig.includeTax) {
    var tax = price / (100 + this.taxConfig.defaultTax) * this.taxConfig.defaultTax;
    var excl = price - tax;
    var incl = excl*(1+(this.taxConfig.currentTax/100));
} else {
    var tax = price * (this.taxConfig.currentTax / 100);
    var excl = price;
    var incl = excl + tax;
}

if (this.taxConfig.showIncludeTax || this.taxConfig.showBothPrices) {
    price = incl;
} else {
    price = excl;
}

var str = option.label;
if(price){
    if (this.taxConfig.showBothPrices) {
        // BEGIN:: custom price display update
        // NOTE:: 'true' was changed to 'false' in 3 places.
        str+= ' ' + this.formatPrice(excl, false) + ' (' + this.formatPrice(price, false) + ' ' + this.taxConfig.inclTaxTitle + ')';
    } else {
        str+= ' ' + this.formatPrice(price, false);
        // END:: custom price display update
    }
}
return str;

});

1
Magarusu

私は、Magentoがデフォルトでそのような奇妙なロジックをどのように使用できるかに驚いています。

バリアントごとに異なる価格を表示する機能が利用可能である必要があり、おそらくデフォルトの価格も利用できるはずです。

Prestashopはこれを行い、各バリアントを選択するときに画像を自動的に切り替えます!

0
Cristiano Leoni

ファイル_js/varien/product.js_を編集し、行番号_691_を確認します。

商品詳細ページから属性価格を変更した場合、ここでトリガーが起動します。 alert(price);で確認するだけで、変更可能な価格を取得できます。

0
Manimaran

magento 1.9で、js/varien /configurable.jsのgoto関数getOptionLabelを開きます。

必要に応じて、この機能コードを変更してください。

0

1.7では(これがいつ変更されたかはわかりません)、状況が変更されました。価格文字列は、Mage/Catalog/Block/Product/View/Options/Type/Selectから呼び出されたときに、_formatPrice関数のMage/Catalog/Block/Product/View/Options /Abstract.php内のPHPに組み込まれることになります。 .php

これらの2つのクラスのいずれかを変更すると、その特定のコンボだけでなく、サイト全体で変更が引き起こされることに注意してください。

0
Nuno Furtado