OnePageチェックアウト-配送方法に応じて支払い方法を非表示にする


7

CE 1.9.0.1を使用していて、モジュールを正しく作成して登録しましたが、配送方法を検出できないようです。基本的に、定額または送料無料を選択した場合、代金引換を非表示にします。これが私のオブザーバークラス用のコードです。

class Kol_PaymentToggle_Model_Observer
{
    public function paymentMethodIsActive(Varien_Event_Observer $observer) {
        $event  = $observer->getEvent();
        $method = $event->getMethodInstance();
        $result = $event->getResult(); 
        $quote = $observer->getEvent()->getQuote();
        $shippingMethod = $quote->getShippingAddress()->getShippingMethod();
        if($shippingMethod == "standardshipping" || $shippingMethod == "free") {
            if($method->getCode() == 'cashondelivery' ) {
                $result->isAvailable = false;
            }
        }
    }
}

正しい配送方法コード名または支払い方法コード名を使用していないと思いますが、よくわかりません。誰かアドバイスはありますか?

編集: 私は3つの配送方法のみを有効にしています:

  • ストアで収集
    タイトル= ストアで収集
    メソッド名=ストアで収集(拡張リンク
  • 定額
    タイトル=標準の配送
    方法名=標準の配送
  • 送料無料
    タイトル=無料配送
    方法名=無料

うまくいけば、この追加情報が私を助けるのに役立つことが証明できるでしょう!

回答:


7

ユーザーElvarasanが StackOverflowで同じ質問に回答しました。彼の答えは、これを機能させるために必要なすべてを私に提供してくれました。

配送方法に基づいて一部の支払い方法を非表示にするには、まったく観察する必要はありません。

すべてのメソッド(1ページのチェックアウト)は、選択されたメソッドを次のレベルにポストします。したがって、選択した配送方法を支払い方法レベルで取得できます。投稿を印刷するだけです

app/design/frontend/base/default/template/checkout/onepage/payment/methods.phtml

この場合、1つ下に追加します。

<?php print_r($_POST); ?>

これで、前のステップで選択した配送方法を取得できます。そして、注意してください、そうすれば、支払いを隠すために同じファイルに単純なロジック(もしあれば)条件を追加することができます。

たとえば、ここcheck / money orderでは、配送方法がの場合、支払い方法を非表示にしflatます。ここでは、支払い方法コードはcheckmoです。echo $_code = $_method->getCode();同じファイルのようにその変数を出力するだけで、支払い方法コードを取得できます。ですから、ここに単純なものを追加します。

<?php
    $methods = $this->getMethods();
    $oneMethod = count($methods) <= 1;
?>
<?php if (empty($methods)): ?>
    <dt>
        <?php echo $this->__('No Payment Methods') ?>
    </dt>
<?php else:
    foreach ($methods as $_method):
       echo  $_code = $_method->getCode();


if($_POST['shipping_method'] == 'flatrate_flatrate') {
    if($_code == 'checkmo') {
        continue;
    }
}
?>

ここに、

if($_POST['shipping_method'] == 'flatrate_flatrate') {
    if($_code == 'checkmo') {
        continue;
    }
}

配送方法を確認し、表示したくない支払い方法をスキップします。それでおしまい。疑問がある場合は、ここにコメントしてください。

注意:

 shipping_method => flatrate_flatrate
 payment_method   => checkmo

配送方法としてOwebia ShippingとIWD One Page Checkoutを利用している場合、それは適切な方法ですか?ありがとう
Simbus82 2016年

0

上記の方法でもうまくいきましたが、ファイルの場所が異なりました。/httpdocs/app/design/frontend/base/default/template/onestepcheckout/material/onestepcheckout/payment_method.phtml

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.