M2 Coger el pais seleccionado en el summary checkout (Magento 2)

Magento 2.x

bravo_88

Miembro
Buenas,

tengo que mostrar un periodo de envio estimado en el summary del checkout. La logica es:
PHP:
 $getCountry = $this->getQuote()->getShippingAddress()->getCountry();
      
        if($getCountry  == "ES"){
            echo "<p><strong>Tiempo estimado de env&iacute;o: 48 H</strong></p>";
        }
        else{
            echo "<p><strong>Tiempo estimado de env&iacute;o: 96 H</strong></p>";
        }
        ?>
Esto lo hago en: /var/www/clients/client1/web5/web/vendor/magento/module-checkout/view/frontend/templates/cart/shipping.phtml.

Lo que ocurre es que en $getCountry = $this->getQuote()->getShippingAddress()->getCountry(); guardo el pais de la direcion agregada por el usuario en su libro de direcciones, pero necesito coger el pais que se selecciona en el momento de la simulación de envio en el sumary como muestro en la captura.

Gracias!!

Un saludo!
 

Adjuntos

  • imagen.png
    imagen.png
    15,8 KB · Visitas: 1
Solución
Hola bravo,

Al recargarse a través de AJAX, la dirección de envío que recoges a través de PHP es el valor que tenía el objeto cuando cargaste la página, por tanto, siempre que cambie el selector, en principio tendrías que recargar la página para...

Toni FactoriaDigital

Experto en Magento de Factoría Digital
Miembro del equipo
Hola,

Está devolviendo null también del objeto de quote. Puedes probar con checkout-data, algo así: How to select shipping address and trigger shipping rates to update on checkout in Magento 2 - Dmytro Poperechnyy - Magento Development Notes

Pero sin todo el código que aparece ahí, puedes aprovechar la inyección a requirejs de la parte:

JavaScript:
'Magento_Checkout/js/checkout-data',

Pasarle el parámetro checkoutData a la función y dentro utilizar:

JavaScript:
checkoutData.shippingAddress();

o bien:

JavaScript:
checkoutData.getShippingAddress();

Sin tenerlo a mano, no sé exactamente cuál sería.
Ve jugando con las opciones que te da y a ver si logras sacar el país.

Un saludo.
 
Upvote 0

bravo_88

Miembro
ReferenceError: checkoutData is not defined ... tampoco me coge el cehckoutData

JavaScript:
<script>
    require([
        'jquery',
        'Magento_Checkout/js/checkout-data',
        
    ], function($, quote) {
        var shippingAddress = checkoutData.getShippingAddress();
        console.log(shippingAddress);
        //var country = shippingAddress.getCountry();
        //alert(country);
    });
</script>

Pero buscando, es asi como se utiliza checkoutData.getShippingAddress();
 
Upvote 0

Toni FactoriaDigital

Experto en Magento de Factoría Digital
Miembro del equipo
Te has dejado una parte que te comenté:

Pasarle el parámetro checkoutData a la función

Fíjate que function($, quote) no le has pasado checkoutData. Al sustituir el segundo parámetro de require de quote a checkout-data, ahora tienes accesible checkoutData desde la variable quote. Cambia quote por checkoutData y ya te funcionaría.

Un saludo.
 
Upvote 0

bravo_88

Miembro
he probado con quote y checkoutData:

JavaScript:
<script>
    require([
        'jquery',
        'Magento_Checkout/js/model/quote',
         'ko',
        'Magento_Checkout/js/checkout-data'

    ], function($, quote, ko,  checkoutData) {
        var shippingAddress = quote.shippingAddress();
        var shippingAddress2 = checkoutData.getShippingAddressFromData();
        console.log(shippingAddress +" "+shippingAddress2);
        //var country = shippingAddress.getCountry();
        //alert(country);
    });
</script>

Porque he usado quote? Porque la mayoria de ejemplos que he encontrado por internet es lo que ponian. Despues encontre la funcion checkoutData.getShippingAddressFromData(); porque las anteriores no reconocia la funcion...

Resultado, dos null en la cosola... No se porque puden venir vacias o si no estamos cargando bien las funciones... Estoy mareado ya porque no se como traerme los datos...
 
Upvote 0

Toni FactoriaDigital

Experto en Magento de Factoría Digital
Miembro del equipo
Hola bravo,

Entonces, sin poder trastear con la página o con el código, no te podría decir por donde tirar.
Lo único que te puedo recomendar es que eches un vistazo a ejemplos existentes del propio core de Magento, sobretodo en el módulo de checkout: vendor/magento/module-checkout/

Puede que este enlace también te ayude: Customize Checkout | Magento 2 Developer Documentation

Un saludo.
 
Upvote 0
Arriba