Excluir produto associado de produto configurável da regra de preço do catálogo


8

Estou tentando excluir o produto simples associado do produto configurável da regra de preço do catálogo. O motivo para fazer isso tudo o que eu já adicionei -preço na seção de configuração do super atributo e não quero mais dar desconto nesse produto em particular .

Tentei excluir o produto para salvar na catalogrule_producttabela, mas descobri que essa tabela não salva o produto associado, salva a ID do produto configurável e calcula o preço usando-a.

Também tentei alguma condição no configurable.php, mas sem sorte ainda ..

Não quero usar nenhuma maneira suja de fazer isso. Por favor, diga-me qual é a maneira inteligente de fazer isso ..


11
A configuração da opção: "Ativar descontos para subprodutos" para "Não" na regra de catálogo> Ação ajuda?
precisa saber é o seguinte

Não, não está funcionando.
Jitendra #

Respostas:


2

O Magento não suporta isso por padrão. Em vez disso, substituímos Mage_SalesRule_Model_Validator e criamos uma reescrita da regra de vendas. Nesse sentido, verificamos se o produto associado corresponde à regra de vendas.

app / code / local / AAA / SalesRule / etc / 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>

app / code / local / AAA / SalesRule / Model / 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

Você pode usar a seção Atributos de super produtos para aumentar o preço padrão de um produto associado. O preço do produto associado continuará sendo exibido no painel do administrador. Na loja, o item terá um valor zero, a menos que você insira um novo preço como um valor fixo ou como uma porcentagem do preço padrão do produto configurável.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.