Estoy usando Magento 1.4.1.1 y quiero deshabilitar la opción de pago para algunos productos.quiero mostrar sólo el dinero en Efectivo en el método de Entrega para algunos productos y la necesidad de ocultar otros.

Cualquier cuerpo no se para que me ayude?¿Cómo puedo manejar esto?¿Hay alguna opción en administración o necesito personalizar el código.Si es así, ¿podría usted por favor me dan un código y la ruta exacta a los archivos?

gracias de antemano.

OriginalEl autor Harikris | 2012-12-23

2 Comentarios

  1. 9

    Una forma discreta de filtrado método de pago es implementar observador para el evento llamado payment_method_is_active

    Pasos

    1> Registrar el evento: ‘payment_method_is_active’ en config.xml.
    Agregue el siguiente código xml en app/code/local/MagePsycho/Paymentfilter/etc/config.xml:

    ...
    <global>
        ...
        <events>
            <payment_method_is_active>
                <observers>
                    <paymentfilter_payment_method_is_active>
                        <type>singleton</type>
                        <class>paymentfilter/observer</class>
                        <method>paymentMethodIsActive</method>
                    </paymentfilter_payment_method_is_active>
                </observers>
            </payment_method_is_active>
        </events>
        ...
    </global>
    ...

    2> Implementar el modelo de observador
    Crear observador archivo: app/code/local/MagePsycho/Paymentfilter/Model/Observer.php y pegar el siguiente código:

    <?php
    /**
     * @category   MagePsycho
     * @package    MagePsycho_Paymentfilter
     * @author     [email protected]
     * @website    http://www.magepsycho.com
     * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
        */
    class MagePsycho_Paymentfilter_Model_Observer {
    
        public function paymentMethodIsActive(Varien_Event_Observer $observer) {
            $event           = $observer->getEvent();
            $method          = $event->getMethodInstance();
            $result          = $event->getResult();
            $currencyCode    = Mage::app()->getStore()->getCurrentCurrencyCode();
    
    
                if($someTrueConditionGoesHere){
                    $result->isAvailable = true;
                }else{
                    $result->isAvailable = false;
                }
    
        }
    
    }
    Mejor respuesta! No vuelve a escribir, sin núcleo hacks 😉 ¡Bien hecho!

    OriginalEl autor MagePsycho

  2. 3

    Primero crear un atributo del producto (nombre : ‘magepal_payment_filter_by_product’, tipo : sí/no) para identificar estos productos.

    E. g base de Magento v1.7 podría

    1. Activar automáticamente el pago del módulo de programación ver https://stackoverflow.com/a/14023210/1191288

    2. Permitir a todos de pago aplicable módulo y el filtro del módulo para mostrar donde

    /App/code/local/MagePal/PaymentFilterByProduct/etc/config.xml

    <?xml version="1.0"?>
    <config>
        <modules>
            <MagePal_PaymentFilterByProduct>
                <version>1.0.1</version>
            </MagePal_PaymentFilterByProduct>
        </modules>
        <global>
            <helpers>
                <paymentfilterbyproduct>
                    <class>MagePal_PaymentFilterByProduct_Helper</class>
                </paymentfilterbyproduct>
                <payment>
                    <rewrite>
                        <data>MagePal_PaymentFilterByProduct_Helper_Payment_Data</data>
                    </rewrite>
                </payment>            
            </helpers>      
        </global>
    </config>

    /App/code/local/MagePal/PaymentFilterByProduct/Helper/Payment/Data.php

    <?php
    class MagePal_PaymentFilterByProduct_Helper_Payment_Data extends Mage_Payment_Helper_Data
    {
    
        public function getStoreMethods($store = null, $quote = null)
        {   
            $methods = parent::getStoreMethods($store, $quote);
    
            if(!Mage::getStoreConfig('paymentfilterbyproduct/general_option/paymentfilterbyproduct_enable', Mage::app()->getStore()) || !$quote){
                return $methods;
            }
    
            //get a list of product in cart
            $cart = Mage::getSingleton('checkout/session');
    
            $specialProductInCart = array();
    
            foreach ($cart->getQuote()->getAllItems() as $item) {
                $specialProductInCart[] = $item->getMagepalPaymentFilterByProduct();                 
            }
    
            //if special product in cart 
            //need to if check $item->getMagepalPaymentFilterByProduct() return 'yes/no' or '0/1)
            if(in_array('yes', $specialProductInCart)){
               $filter_csv = Mage::getStoreConfig('paymentfilterbyproduct/filter_option/paymentfilter_special_products', Mage::app()->getStore()); 
            }
            else{
                $filter_csv = Mage::getStoreConfig('paymentfilterbyproduct/filter_option/paymentfilter_all_product', Mage::app()->getStore());
            }
    
            $filter_array = explode(",", $filter_csv);
    
            foreach ($methods as $k => $method){
                if(!in_array($method->getCode(), $filter_array))
                    unset($methods[$k]);       
            }//methods
    
            return $methods;
        }
    }

    /App/code/local/MagePal/PaymentFilterByProduct/etc/system.xml

    <?xml version="1.0"?>
    <config>
    <tabs>
    <magepal translate="label" module="paymentfilterbyproduct">
    <label>MagePal</label>
    <sort_order>900</sort_order>
    </magepal>
    </tabs>
    <sections>
    <paymentfilterbyproduct translate="label" module="paymentfilterbyproduct">
    <label>Payment Method Filter by Product</label>
    <tab>magepal</tab>
    <sort_order>1000</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>1</show_in_store>
    <groups>
    <general_option translate="label">
    <label>General Options</label>
    <frontend_type>text</frontend_type>
    <sort_order>1</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>1</show_in_store>
    <fields>
    <paymentfilter_enable translate="label">
    <label>Enable Payment Filter</label>
    <frontend_type>select</frontend_type>
    <source_model>adminhtml/system_config_source_yesno</source_model>
    <sort_order>50</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>1</show_in_store>
    </paymentfilter_enable>
    </fields>
    </general_option>
    <filter_option translate="label">
    <label>Payment Method Filter Configuration</label>
    <frontend_type>text</frontend_type>
    <sort_order>2</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>1</show_in_store>
    <comment>Please enable all applicable payment methods in system payment config</comment>
    <fields>
    <paymentfilter_all_products translate="label">
    <label>Select Default Payment option for All Products</label>
    <frontend_type>multiselect</frontend_type>
    <source_model>MagePal_PaymentFilterByProduct_ActivePaymentMethod</source_model>
    <sort_order>30</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>1</show_in_store>
    </paymentfilter_admin>
    <paymentfilter_special_products translate="label">
    <label>Select Payments for Cart with Special Products</label>
    <frontend_type>multiselect</frontend_type>
    <source_model>MagePal_PaymentFilterByProduct_ActivePaymentMethod</source_model>
    <sort_order>40</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>1</show_in_store>
    </paymentfilter_store>
    </fields>
    </filter_option>
    </groups>
    </paymentfilterbyproduct>
    </sections>
    </config>

    /App/code/local/MagePal/PaymentFilterByProduct/Helper/Data.php

    <?php 
    class MagePal_PaymentFilterByProduct_Helper_Data extends Mage_Core_Block_Template
    {
    }

    /App/code/local/MagePal/PaymentFilterByProduct/ActivePaymentMethod.php

    <?php
    class MagePal_PaymentFilterByProduct_ActivePaymentMethod
    {
    //get all active (enable) payment method
    public function toOptionArray()
    {
    $payments = Mage::getSingleton('payment/config')->getActiveMethods();
    foreach ($payments as $paymentCode=>$paymentModel) {
    if($paymentModel->canUseCheckout() == 1){
    $paymentTitle = Mage::getStoreConfig('payment/'.$paymentCode.'/title');
    $methods[$paymentCode] = array(
    'label'   => $paymentTitle,
    'value' => $paymentCode,
    );
    }
    }
    return $methods;
    }
    }

    /App/etc/modules/MagePal_PaymentFilterByProduct.xml

    <?xml version="1.0"?>
    <config>
    <modules>
    <MagePal_PaymentFilterByProduct>
    <active>true</active>
    <codePool>local</codePool>
    </MagePal_PaymentFilterByProduct>
    </modules>
    </config>

    OriginalEl autor Renon Stewart

Dejar respuesta

Please enter your comment!
Please enter your name here