4

選択または入力された配送先住所の国がフランスであるかどうかに基づいて、shipping_method.phtml に基づくテキスト/コードを非表示にしようとしています。

私が見つけた唯一のコードは

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

しかし、これでできることは、アドレス帳にあるデフォルトの住所の国 ID を返すことだけです。そのため、アドレスが既にアドレス帳にある場合はコードが機能しますが、顧客が新しいアドレスに送信することを決定した場合は機能しません。

したがって、php/javascript で選択/入力された CountryIDにアクセスする方法が必要です(進行状況サイドバーに表示されるため、セッションのどこかに保存する必要があります)。

私は、magento CE 1.7.0.2 で標準のワンページ チェックアウトを使用していることに注意してください。

4

3 に答える 3

8

このコード$this->getQuote()->getShippingAddress()->getCountry()を試して国 ID を取得できます。

于 2012-10-15T07:36:10.633 に答える
2

問題は、このコードがページの読み込み時に実行され、基本的にそのステップに到達するまで配送方法ブロックが非表示になることです。この意味は

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

l

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>

これが誰かを助けることを願っています!

于 2012-09-30T11:16:53.200 に答える
0

Magentoで1ページのチェックアウトを使用している場合は、このコードを使用してください

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

あなたも使うことができます:-

$countryId =Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getData('country_id');
于 2012-10-15T07:28:15.127 に答える