Могу ли я установить пустое значение для цены, если есть настраиваемый продукт?


У меня есть настраиваемые продукты по размерам, и я хочу не отображать цену в начале, но если выбрать или выбрать по размеру, то отображать только цену. И если есть один продукт, то цена будет отображаться в начале.

Могу ли я редактировать jquery по цене и как я могу редактировать? Пожалуйста, предложите мне!

Configurable Product

Author: Bishal Neupane, 2015-09-28

1 answers

Это очень простое изменение. Вам необходимо создать новый модуль или изменить существующий модуль. Информация ниже будет выглядеть сложной, но если вы будете следовать ответам, вы увидите, что работа уже была проделана за вас.

Предыстория и настройка:

Этот модуль должен зависеть от Mage_Catalog, чтобы гарантировать, что ваши файлы будут включены в выполнение страницы после файлов Mage_Catalog.

Таким образом, для этого вам необходимо создать файл модуля в приложение/etc/модули (с именем YourCompany_HideConfigurablePrices.xml):

<?xml version="1.0"?>
<config>
    <modules>
        <YourCompany_HideConfigurablePrices>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Catalog/>
            </depends>
        </YourCompany_HideConfigurablePrices>
    </modules>
</config>

Затем создайте свой файл config.xml в app/code/local/YourCompany/HideConfigurablePrices/etc/. Это файл конфигурации для вашего модуля, который сообщает Magento, как взаимодействовать с вашим модулем. В случае этого ответа ваш config.xml будет очень простым:

<?xml version="1.0"?>
<config>
    <modules>
        <YourCompany_HideConfigurablePrices>
            <version>1.0</version>
        </YourCompany_HideConfigurablePrices>
    </modules>
    <frontend>
        <layout>
            <updates>
                <YourCompany_HideConfigurablePrices>
                    <file>YourCompany/HideConfigurablePrices.xml</file>
                </YourCompany_HideConfigurablePrices>
            </updates>
        </layout>
    </frontend>
</config>

Создание XML-файла макета:

Затем вам нужно создать XML-файл обновления/макета: app/design/frontend/base/default/layout/YourCompany/HideConfigurablePrices.xml:

<?xml version="1.0"?>
<layout>
    <PRODUCT_TYPE_configurable translate="label" module="catalog">
        <reference name="head">
            <action method="addJs"><script>your-company/hide-configurable-prices.js</script></action>
        </reference>
    </PRODUCT_TYPE_configurable>
</layout>

Где происходит волшебство:

Наконец, в js/your-company/hide-configurable-prices.js вы можете добавить следующее код:

Product.Config.prototype.configureForValues = function () {
    if (this.values) {
        this.settings.each(function(element){
            var attributeId = element.attributeId;
            element.value = (typeof(this.values[attributeId]) == 'undefined')? '' : this.values[attributeId];
            this.configureElement(element);
        }.bind(this));
    }

    this.reloadPrice();
};


Product.Config.prototype.reloadPrice = function(){
    if (this.config.disablePriceReload) {
        return;
    }
    var price    = 0;
    var oldPrice = 0;
    var hasSelectedOption = false;

    for(var i=this.settings.length-1;i>=0;i--){
        var selected = this.settings[i].options[this.settings[i].selectedIndex];
        if(selected.config){
            price    += parseFloat(selected.config.price);
            oldPrice += parseFloat(selected.config.oldPrice);
            hasSelectedOption = true;
        }
    }

    if (optionsPrice) {
        if (hasSelectedOption === false) {
            $H(optionsPrice.containers).each(function (pair) {
                if ($(pair.value + '_clone')) {
                    $(pair.value + '_clone').hide();
                }
                if ($(pair.value)) {
                    $(pair.value).hide();
                }
            });
        } else {
            $H(optionsPrice.containers).each(function (pair) {
                if ($(pair.value + '_clone')) {
                    $(pair.value + '_clone').show();
                }
                if ($(pair.value)) {
                    $(pair.value).show();
                }
            });

            optionsPrice.changePrice('config', {'price': price, 'oldPrice': oldPrice});
            optionsPrice.reload();
        }
    }

    return price;

    if($('product-price-'+this.config.productId)){
        $('product-price-'+this.config.productId).innerHTML = price;
    }
    this.reloadOldPrice();
}

Существует довольно много способов упростить вышеупомянутый JS, но это самый простой способ показать/скрыть контейнеры с ценами.

 2
Author: Joseph at SwiftOtter, 2015-10-03 20:28:27