Coger el pais selec...
 
Avisos
Vaciar todo

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

28 Respuestas
2 Usuarios
0 Me gustas
1,454 Visitas
(@bravo_88)
Respuestas: 78
Estimable Member
Topic starter
 

Buenas,

tengo que mostrar un periodo de envio estimado en el summary del checkout. La logica es:
[CODE=php] $getCountry = $this->getQuote()->getShippingAddress()->getCountry();

if($getCountry == "ES"){
echo "<p><strong>Tiempo estimado de envío: 48 H</strong></p>";
}
else{
echo "<p><strong>Tiempo estimado de envío: 96 H</strong></p>";
}
?>[/code]
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!

Attached files

 
Respondido : 12/03/2020 11:28 am
Toni FactoriaDigital
(@toni-factoriadigital)
Respuestas: 358
Illustrious Member Moderator
 

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 ver aplicado tu cambio.

Si quieres hacerlo en vivo, deberías utilizar KnockoutJS en la plantilla que estés utilizando o haciendo uso de requirejs, inyectando el quote y la dirección de envío para recoger el valor.
Sin haberlo probado, podrías utilizar algo así:

[CODE=javascript]require([
'jquery',
'Magento_Checkout/js/model/quote'
], function($, quote) {
$('#target').on('change', function(e) {
var shippingAddress = quote.shippingAddress();
var country = shippingAddress.getCountry();
});
});[/code]

Recuerda cambiar #target por el ID de tu selector de país.

Espero que te sirva,
Un saludo.

Experto en Magento de FactoriaDigital
Prueba 1 mes gratis nuestro Hosting Magento

 
Respondido : 12/03/2020 12:14 pm
(@bravo_88)
Respuestas: 78
Estimable Member
Topic starter
 

buah, pues no tengo ni idea de KnockoutJS ... tengo poca experiencia en M2... Donde debería poner ese código? porque entiendo que en el phtml que estoy trabjando no, no?

 
Respondido : 12/03/2020 12:23 pm
Toni FactoriaDigital
(@toni-factoriadigital)
Respuestas: 358
Illustrious Member Moderator
 

Sí, ese fragmento te puede servir dentro del phtml, ya que es requirejs. Prueba primero con ese y a ver qué tal.
Lo único que deberás cambiar es el ID del selector HTML, sustituyendo #target en el snippet que te he pasado.

Si tras var country, etc, pones:

[ICODE]console.log(country);[/ICODE]

Deberías ver por consola el código de país que está cogiendo cada vez que cambies el selector. Si te devuelve el que necesitas, ya solo tendrás que mostrar el mensaje que corresponda, que podría ser mostrando u ocultando un DIV en la página, si no te quieres poner a hacer virguerías.

Un saludo.

Experto en Magento de FactoriaDigital
Prueba 1 mes gratis nuestro Hosting Magento

 
Respondido : 12/03/2020 12:25 pm
(@bravo_88)
Respuestas: 78
Estimable Member
Topic starter
 

te digo ahora... muchas gracias!!

 
Respondido : 12/03/2020 12:28 pm
(@bravo_88)
Respuestas: 78
Estimable Member
Topic starter
 

No consigo nada. Si en la consola pongo el codigo me sale un "localRequire..." como viene en la captura...

Lo siento, pero es que de KnockoutJS no tengo ni idea...

Attached files

 
Respondido : 12/03/2020 1:25 pm
Toni FactoriaDigital
(@toni-factoriadigital)
Respuestas: 358
Illustrious Member Moderator
 

Hola,

En consola no puedes ponerlo directamente, ya que requirejs funciona diferente. Suele localizar las dependencias y las agrupa juntas, creando la inyección de la librería.
Si lo ejecutas directamente, no funcionará, solo deberías probar a pegar la parte de jQuery, que es a partir de $('#country_id'), si es que quieres probarlo directamente ahí.

De todas formas, ¿has probado a ponerlo en el .phtml dentro de un tag <script> y no te ha funcionado?

Un saludo.

Experto en Magento de FactoriaDigital
Prueba 1 mes gratis nuestro Hosting Magento

 
Respondido : 12/03/2020 1:29 pm
(@bravo_88)
Respuestas: 78
Estimable Member
Topic starter
 

Si, ahi está el código:
[CODE=php]<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/

?>
<?php /** @var $block MagentoCheckoutBlockCartShipping */ ?>

<div id="block-shipping"
class="block shipping"
data-mage-init='{"collapsible":{"openedState": "active", "saveState": true}}'
>
<div class="title" data-role="title">
<strong id="block-shipping-heading" role="heading" aria-level="2">
<?= $block->getQuote()->isVirtual()
? $block->escapeHtml(__('Estimate Tax'))
: $block->escapeHtml(__('Estimate Shipping and Tax'))
?>
</strong>
</div>

<div id="block-summary"
data-bind="scope:'block-summary'"
class="content"
data-role="content"
aria-labelledby="block-shipping-heading"
>
<!-- ko template: getTemplate() --><!-- /ko -->
<script type="text/x-magento-init">
{
"#block-summary": {
"Magento_Ui/js/core/app": <?= /* @noEscape */ $block->getJsLayout() ?>
}
}
</script>
<script>
window.checkoutConfig = <?= /* @noEscape */ $block->getSerializedCheckoutConfig() ?>;
window.customerData = window.checkoutConfig.customerData;
window.isCustomerLoggedIn = window.checkoutConfig.isCustomerLoggedIn;
require([
'mage/url',
'Magento_Ui/js/block-loader'
], function(url, blockLoader) {
blockLoader(
"<?= $block->escapeJs($block->escapeUrl($block->getViewFileUrl('images/loader-1.gif'))) ?>"
);
return url.setBaseUrl('<?= $block->escapeJs($block->escapeUrl($block->getBaseUrl())) ?>');
})
</script>
<script>

require([
'jquery',
'Magento_Checkout/js/model/quote'
], function($, quote) {
$('#country_id').on('change', function(e) {
var shippingAddress = quote.shippingAddress();
var country = shippingAddress.getCountry();
alert(country);
});

});

</script>
<!--mostrar tiempo estimado----->
<?php
//$test = $block->getJsLayout();
$getCountry = $this->getQuote()->getShippingAddress()->getCountry();

if($getCountry == "ES"){
echo "<p><strong>Tiempo estimado de envío: 48 H</strong></p>";
}
else{
echo "<p><strong>Tiempo estimado de envío: 96 H</strong></p>";
}
?>
<!--fin mostrar envio-->
</div>
</div>
[/CODE]

 
Respondido : 12/03/2020 1:34 pm
(@bravo_88)
Respuestas: 78
Estimable Member
Topic starter
 

Además, no estoy seguro del ID, porque el que me aparece en el inspector de codigo cambia con cada recarga, vi el "name=country_id" y probe con ese.... pero es que tampoco doy con el archivo donde carga ese select y no se como sacar su id exacto.... Esta siendo un dolor de cabeza esto

Attached files

 
Respondido : 12/03/2020 1:43 pm
Toni FactoriaDigital
(@toni-factoriadigital)
Respuestas: 358
Illustrious Member Moderator
 

El ID en este caso sería TQ6OA96, pero se estará auto-generando, así que no te va a servir.
Al ser jQuery puedes seleccionarlo diferente a través del atributo name así:

[ICODE]$('select [name=country_id]')[/ICODE]

Un saludo.

Experto en Magento de FactoriaDigital
Prueba 1 mes gratis nuestro Hosting Magento

 
Respondido : 12/03/2020 2:06 pm
(@bravo_88)
Respuestas: 78
Estimable Member
Topic starter
 

He puesto como me has dicho
[CODE=javascript]<script>

require([
'jquery',
'Magento_Checkout/js/model/quote'
], function($, quote) {
$('select [name=country_id]').on('change', function(e) {
var shippingAddress = quote.shippingAddress();
var country = shippingAddress.getCountry();
alert(country);
});

});

</script>[/code]

Pero ni me saca alert ni veo como si me coge o no el pais....

 
Respondido : 12/03/2020 3:07 pm
Toni FactoriaDigital
(@toni-factoriadigital)
Respuestas: 358
Illustrious Member Moderator
 

¿Sería posible ver la página para ver si te puedo seguir ayudando?

Un saludo.

Experto en Magento de FactoriaDigital
Prueba 1 mes gratis nuestro Hosting Magento

 
Respondido : 12/03/2020 3:10 pm
(@bravo_88)
Respuestas: 78
Estimable Member
Topic starter
 

Ya me gustaría, pero por politica de empresa no puedo.... 🙁 No se que info darte para que me puedas ayudar

 
Respondido : 12/03/2020 3:16 pm
Toni FactoriaDigital
(@toni-factoriadigital)
Respuestas: 358
Illustrious Member Moderator
 

Pues no se me ocurre cómo ayudarte. Lo que yo haría sería intentar debugear ese código. Sácalo a fuera del bloque de jQuery, a ver si simplemente al cargar la página funciona. De ser así, significa que no tienes bien el selector jQuery del select de país.

Quedaría algo así:

[CODE=javascript]<script>
require([
'jquery',
'Magento_Checkout/js/model/quote'
], function($, quote) {
var shippingAddress = quote.shippingAddress();
var country = shippingAddress.getCountry();
alert(country);
});
</script>[/code]

Y a malas, solo debugear el objeto de shippingAddress, poniendo algo así:

[ICODE]console.debug(shippingAddress);[/ICODE]

A ver si te da una pista del array key que deberías coger.

Un saludo.

Experto en Magento de FactoriaDigital
Prueba 1 mes gratis nuestro Hosting Magento

 
Respondido : 12/03/2020 3:33 pm
(@bravo_88)
Respuestas: 78
Estimable Member
Topic starter
 

Pues intentaré probar eso. Muchas gracias! Iré actualizando con noticias!

 
Respondido : 13/03/2020 10:15 am
Página 1 / 2