OnePage Checkout - Ẩn phương thức thanh toán tùy thuộc vào Phương thức giao hàng


7

Tôi đang sử dụng CE 1.9.0.1 và đã tạo và đăng ký chính xác mô-đun của mình, nhưng dường như tôi không thể phát hiện các phương thức giao hàng. Về cơ bản, tôi muốn ẩn Tiền mặt khi giao hàng nếu Tỷ lệ phẳng hoặc Giao hàng miễn phí được chọn. Đây là mã tôi có cho lớp người quan sát của mình:

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

Tôi đoán rằng tôi đã không sử dụng đúng tên mã phương thức giao hàng hoặc tên mã phương thức thanh toán, nhưng tôi không chắc chắn. Bất cứ ai có lời khuyên?

EDIT: Tôi chỉ có 3 phương thức vận chuyển được kích hoạt:

  • Thu Trong cửa hàng
    Title = Thu thập trong cửa hàng
    Phương Name = Thu Trong Store ( liên kết mở rộng )

  • Tiêu đề giá phẳng =
    Tên phương thức giao hàng tiêu chuẩn = Vận chuyển tiêu chuẩn
  • Vận Chuyển Miễn Phí
    Tiêu đề = Miễn phí giao hàng
    Tên Phương Pháp = miễn phí

Hy vọng thông tin bổ sung này có thể chứng minh hữu ích đối với việc giúp tôi!

Câu trả lời:


7

Tôi đã nhận được câu trả lời cho câu hỏi tương tự trên StackOverflow của người dùng Elvarasan . Câu trả lời của anh ấy cung cấp cho tôi mọi thứ tôi cần để làm việc này.

Để ẩn một số phương thức thanh toán dựa trên phương thức giao hàng, bạn không cần phải quan sát mọi thứ:

Mỗi phương thức (trong một trang kiểm tra) đăng các phương thức được chọn lên cấp độ tiếp theo. Vì vậy, bạn có thể nhận được phương thức giao hàng được chọn, ở cấp phương thức thanh toán. Chỉ cần in những điều đăng trong

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

trong phần này bên dưới một,

<?php print_r($_POST); ?>

Vì vậy, bây giờ bạn có thể có được các phương thức vận chuyển được chọn bước trước. Và lưu ý nó, vì vậy bây giờ, bạn có thể thêm điều kiện logic đơn giản (nếu khác) trong cùng một tệp để ẩn thanh toán.

Ví dụ ở đây tôi muốn ẩn check / money orderphương thức thanh toán, nếu phương thức vận chuyển là flat. Ở đây mã phương thức thanh toán là checkmo. bạn có thể nhận mã phương thức thanh toán bằng cách in biến đó như echo $_code = $_method->getCode();trong cùng một tệp. Vì vậy, ở đây chỉ cần thêm đơn giản nếu khác,

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

Đây,

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

kiểm tra phương thức giao hàng và bỏ qua phương thức thanh toán mà chúng tôi không muốn hiển thị. Đó là nó. Hãy bình luận ở đây nếu bạn có bất kỳ nghi ngờ.

Ghi chú:

 shipping_method => flatrate_flatrate
 payment_method   => checkmo

Nếu tôi có Owebia Shipping cho các phương thức giao hàng và IWD One Page Checkout, đó có phải là phương pháp phù hợp để áp dụng không? Cảm ơn
Simbus82

0

Phương pháp trên cũng có hiệu quả với tôi, nhưng vị trí tệp của tôi thì khác. /httpdocs/app/design/frontend/base/default/template/onestepcheckout/m vật / onlineepcheckout / payment_method.phtml

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.