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

8

Я пытаюсь исключить связанный простой продукт настраиваемого продукта из правила цены каталога. Причиной этого является то, что я уже добавил - цена в разделе конфигурации супер атрибута, и я больше не хочу давать скидку этому конкретному продукту. ,

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

Также я попытался выйти из условия в configurable.php, но пока не повезло.

Я не хочу использовать какой-либо грязный способ сделать это. Пожалуйста, скажите мне, что умный способ сделать это ..

Jitendra
источник
1
Помогает ли установка параметра «Включить скидки на субпродукты» на «Нет» в Правиле каталога> Действие?
Ракеш Шевале
Нет, это не работает.
Джитендра

Ответы:

2

Magento не поддерживает это по умолчанию. Вместо этого мы переопределили Mage_SalesRule_Model_Validator и создали перезапись salesrule. В этом мы проверяем, соответствует ли связанный продукт правилу продаж.

Приложение / код / ​​местные / AAA / SalesRule / и т.д. / config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <AAA_SalesRule>
            <version>0.1.0</version>
        </AAA_SalesRule>
    </modules>
    <global>
        <models>
            <aaa_salesrule>
                <class>AAA_SalesRule_Model</class>
            </aaa_salesrule>
            <salesrule>
                <rewrite>
                    <validator>AAA_SalesRule_Model_SalesRule_Validator</validator>
                </rewrite>
            </salesrule>
        </models>
    </global>
</config>

Приложение / код / ​​местные / AAA / SalesRule / Модель / SalesRule / Validator.php

private function _hasChildInCart($product) {
        $quote = Mage::getSingleton('checkout/session')->getQuote();
        $childProducts = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null, $product);
        $childrenIds = $this->_getChildrenIds($childProducts);

        foreach ($quote->getAllItems() as $item) {
            if (in_array($item->getProductId(), $childrenIds)) {
                $registeredItem = Mage::registry('rule_config_product_' . $product->getId());
                if ($registeredItem != null && $registeredItem->getId() != $item->getId()) {
                    Mage::unregister('rule_config_product_' . $product->getId());
                }
                if ($registeredItem == null) {
                    Mage::register('rule_config_product_' . $product->getId(), $item);
                }
                return true;
            }
        }
        return false;
    }

    private function _getChildrenIds($childProducts) {
        $childrenIds = array();
        foreach ($childProducts as $child) {
            $childrenIds[] = $child->getId();
        }

        return $childrenIds;
    }
Сарфараз бхеда
источник
1

Вы можете использовать раздел Атрибуты Super Products, чтобы увеличить цену по умолчанию для соответствующего продукта. Цена на соответствующий продукт будет по-прежнему отображаться на панели администратора. Из магазина элемент будет иметь нулевое значение, если вы не введете новую цену в виде фиксированной суммы или в процентах от цены по умолчанию для Конфигурируемого продукта.

Sourav
источник