Magento:如何从选定/输入的送货地址获取countryID

时间:2012-09-29 19:22:07

标签: magento checkout shipping street-address country

我正在尝试隐藏一些基于shipping_method.phtml的文字/代码,具体取决于所选或输入的送货地址的国家/地区是否为法国。

我找到的唯一代码是

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

但所有这一切都是在地址簿中返回我的默认地址的countryID。 因此,当地址已经在地址簿中时,代码可以工作,但如果客户决定将他/她想要发送到新地址,则代码不起作用。

所以我需要一种方法来访问php / javascript中的选中/输入的CountryID (应该存储在某个地方的会话中,因为它显示在进度侧栏中。)

请注意,我在magento CE 1.7.0.2中使用标准的onepage checkout。

3 个答案:

答案 0 :(得分:8)

您可以尝试使用此代码$this->getQuote()->getShippingAddress()->getCountry() 获取国家ID

答案 1 :(得分:2)

问题是这个代码在页面加载时执行,基本上只是隐藏了送货方法块,直到你进入该步骤。这意味着

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

1

Ajax加载的唯一东西是可用的送货方式,所以我通过挂钩来解决它

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

并添加以下javascript代码

<?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>

供参考:

中的代码
app/design/XXX/XXX/template/checkout/onepage/shipping_method.phtml 

<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>

希望这可以帮助别人!

答案 2 :(得分:0)

如果您使用magento中的单页结帐

,请使用此代码
Mage::getSingleton('checkout/type_onepage')->getQuote()->getShippingAddress()
 ->getCountryId();

你也可以使用: -

$countryId =Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getData('country_id');