Pregunta

He escrito muchos muchos módulos antes, pero por alguna razón mi módulo de envío no anulará un método de envío Magneto exsiting. eso está permitido? ¿Que me estoy perdiendo aqui? El nombre del módulo aparece en la ficha Opciones avanzadas del área de configuración, por lo que se está haciendo cargado, pero no pasa nada. ¿Alguna pista?

Código

etc / modules / Ssi_Shipping.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Ssi_Shipping>
            <active>true</active>
            <codepool>local</codepool>
        </Ssi_Shipping>
    </modules>
</config>

locales / SSI / envío / etc.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Ssi_Shipping>
            <version>0.1.0</version>
        </Ssi_Shipping>
    </modules>
    <global>
        <models>
            <shipping>
                <rewrite>
                    <carrier_tablerate>Ssi_Shipping_Model_Carrier_Tablerate</carrier_tablerate>
                </rewrite>

            </shipping>
        </models>
    </global>
</config>

locales / SSI / envío / modelo / portador / Tablerate.php

<?php
class Ssi_Shipping_Model_Carrier_Tablerate 
    extends Mage_Shipping_Model_Carrier_Tablerate {

        public function isActive()
        {
            Mage::log("here! Ssi_Shipping_Model_Carrier_Tablerate");

            // check to see if it's disabled
            if (parent::isActive() == false)
                return false;

            // check in the shopping cart
            foreach( Mage::getSingleton('checkout/session')->getQuote()->getItemsCollection() as $item ){
                if ($item->getDeliveryFlag() == "test")
                    return true;
            }

            // if nothing is found then disable this option.
            return false;

        }


    }
¿Fue útil?

Solución 3

Después de trabajar a través de éste un poco, he encontrado que la única manera de anular el controlador de envío era hacer un duplicado del archivo (y estructura de directorios) en la carpeta de código local. Entonces podría básicamente modificar el código.

No sé por qué no parece Magento para que la norma primordial de estas funciones de envío, pero una menos hay un trabajo alrededor.

Otros consejos

Hay una manera, pero no es obvio y me obligó a navegar por la fuente del módulo de envío:

Si nos fijamos en Mage_Shipping_Model_Config , descubrirá que el código utilizado como parámetro para Mago :: getModel () se toma de la configuración del almacén. Este código no es el código estándar como 'envío / carrier_tablerate', por lo que no ayuda anulando como de costumbre.

Ahora usted tiene que averiguar primero qué es el código. Por ejemplo quería para anular la portadora matrixrate, por lo que he comprobado como que:

$carrierConfig = Mage::getStoreConfig('carriers/matrixrate')
var_dump($carrierConfig['model']);

Sí, usted puede poner este código en cualquier lugar de la página temporal, pero es útil tener un archivo separado para este tipo de cosas que se pueden ejecutar desde la línea de comandos (a partir de Mago :: aplicación () para inicializar Magento)

En mi caso era el código matrixrate_shipping / carrier_matrixrate , así que tuve que cambiar mi config.xml así:

<global>
    <models>
        <matrixrate_shipping>
            <rewrite>
                <carrier_matrixrate>my_class_name</carrier_matrixrate>
            </rewrite>
        </matrixrate_shipping>
    </models>

en lugar de

<global>
    <models>
        <matrixrate>
            <rewrite>
                <carrier_matrixrate>my_class_name</carrier_matrixrate>
            </rewrite>
        </matrixrate>
    </models>

Buena suerte!

comprobar primero que el modelo está siendo anulado en absoluto. Prueba esto:

var_dump(get_class(Mage::getModel("shipping/carrier_tablerate")));

Ha sido un tiempo, pero tuve el mismo problema en los últimos días. Yo quería anular freeshipping y tarifa plana métodos de envío y además de la respuesta de la I Fab tenido que añadir el siguiente código en etc / config.xml. En mi caso, los valores originales se encuentran en app / código / core / Mago / envío / etc / config.xml.

<?xml version="1.0"?>
<config>
    ...
    <default>
        <carriers>
            <flatrate>
                <model>your_module/shipping_carrier_flatrate</model>
            </flatrate>
            <freeshipping>
                <model>your_module/shipping_carrier_freeshipping</model>
            </freeshipping>
        </carriers>
    </default>
</config>

Los valores del modelo son ejemplos. Usted tiene que reemplazarlos con sus rutas correctas.

Si alguien más se enfrenta a este problema y vino aquí para la solución, que parece OP han utilizado codepool en el archivo de módulo donde debe estar codePool (aviso de la capital P).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top