17

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

ここに画像の説明を入力してください

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

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

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

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

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

4

8 に答える 8

21

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

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

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

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)でそれを呼び出すことをお勧めします。

于 2011-07-31T08:55:47.547 に答える
4

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

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

于 2011-06-05T03:04:28.870 に答える
4

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();

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

于 2014-07-15T08:58:35.183 に答える
1

ここでMagento1.9で動作するソリューションを見つけましたが、コアコードをオーバーライドするため、コアをオーバーライドしないようにする必要があります。

私は新しいjsファイルでこのようなことを試しましたが、どういうわけかコアのconfigular.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;

});

于 2014-12-19T16:39:53.083 に答える
0

js/varien/product.js行番号を確認しながら、ファイルを編集します691

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

于 2011-07-30T11:52:09.513 に答える
0

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

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

于 2013-11-15T16:37:52.663 に答える
0

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

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

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

于 2014-06-27T15:12:43.630 に答える
0

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

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

于 2016-11-11T17:02:49.983 に答える