Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Magento : How to get countryID from selected / entered shipping address

I'm trying to hide some text / code based in the shipping_method.phtml based on whether the country of the selected or entered shipping address is France or not in .

The only code I found was

Mage::getSingleton('checkout/type_onepage')->getQuote()->getShippingAddress()->getCountryId()

But all this does is return the countryID of my default address in the address book. So the code works when the address is already in the address book, but not if the customer decides he/she want to send it to a new address.

So I need a way to access the selected / entered CountryID in php/javascript (should be stored in the session somewhere, because it's shown in the progress sidebar).

Please note that I'm using standard onepage checkout in magento CE 1.7.0.2.

like image 581
Kim Herman Avatar asked Dec 27 '22 17:12

Kim Herman


2 Answers

You can try this code $this->getQuote()->getShippingAddress()->getCountry() to get country id.

like image 167
Afsal Avatar answered Dec 31 '22 07:12

Afsal


The problem is this code gets executed when the page loads and basically the shipping methods block is just hidden until you get to that step. This means that

$this->getQuote()->getShippingAddress()->getCountry()

l

The only thing that gets loaded by Ajax is the available shipping methods, so I solved it by hooking into

app/design/base/default/template/checkout/onepage/shipping_method/available.phtml 

and adding the following javascript code

<?php //Show extra shipping options only if the shipping address is outside of FRANCE ?>
<script type="text/javascript">

  var countryID = '<?= Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getData('country_id') ?>';
  jQuery('#ownTransport')[countryID == 'FR' ? 'hide' : 'show']();

</script>

For reference : The code in

app/design/XXX/XXX/template/checkout/onepage/shipping_method.phtml 

was

<form id="co-shipping-method-form" class="stack-form" action="">
<div id="checkout-shipping-method-load">
    <?php echo $this->getChildHtml('available') ?>
</div>

<script type="text/javascript">
    //<![CDATA[
        var shippingMethod = new ShippingMethod('co-shipping-method-form', "<?php echo $this->getUrl('checkout/onepage/saveShippingMethod') ?>");
    //]]>
</script>

<div id="onepage-checkout-shipping-method-additional-load">
    <?php echo $this->getChildHtml('additional') ?>
</div>

<?php //ADD AMASTY FIELDS ?>

<?php //Show extra shipping options only if the shipping address is outside of FRANCE ?>

<div id="ownTransport">
<?php
    echo Mage::helper('amorderattr')->fields('shipping_method'); 
?>
</div>

<div id="shipping-method-buttons-container" class="buttons-set">
    <button class="button" onclick="shippingMethod.save()"><?php echo $this->__('Continue') ?></button>
    <span class="please-wait" id="shipping-method-please-wait" style="display:none;"><?php echo $this->__('Loading') ?></span>
</div>

Hope this helps someone out !

like image 35
Kim Herman Avatar answered Dec 31 '22 07:12

Kim Herman