Bỏ qua bước Order Review trên Onepage checkout

Nhận xét sản phẩm này

Tình trạng: Còn hàng

0,00 US$
Hoặc

Bỏ qua bước Order Review trên Onepage checkout

More Views

Bỏ qua bước Order Review trên Onepage checkout

Đôi khi chủ shop chỉ muốn khách hàng mua hàng càng nhanh càng tốt, bỏ qua những bước không cần thiết gây khó chịu và mất thời gian. Bài viết này sẽ hướng dẫn bạn cách giúp khách hàng bỏ qua bước Order Review ở trang checkout trên Magento.

  • Đầu tiên chúng ta cần rewrite lại hàm _getStepCodes() được gọi trong Mage_Checkout_Block_Onepage. Thực ra function này nằm trong Mage_Checkout_Block_Onepage_Abstract nhưng chúng ta không thể rewrite lại Abstract class, vậy cứ đặt thẳng nó vào class đang extend từ Mage_Checkout_Block_Onepage

protected function _getStepCodes()
    {
        if ($this->getQuote()->isVirtual()) {
                return array('login', 'billing', 'payment');
        }
        return array('login', 'billing', 'shipping', 'shipping_method', 'payment');
    }

  • Trên trang Onepage checkout, sau khi khách hàng nhập đủ thông tin payment và chuyển sang bước kế tiếp, chúng ta có thể bắt sự kiện đó để lưu Order luôn và chuyển sang trang Checkout success thông qua Event Observer. Event cần bắt ở đây là controller_action_postdispatch_checkout_onepage_savePayment. File config.xml của module sẽ trông thế này:

<events>
      <controller_action_postdispatch_checkout_onepage_savePayment>
        <observers>
          <controller_action_postdispatch_checkout_onepage_savePayment_handler>
            <type>model</type>
            <class>skiporderreview/observer</class>
            <method>saveOrder</method>  
            <args></args>
          </controller_action_postdispatch_checkout_onepage_savePayment_handler>
        </observers>
      </controller_action_postdispatch_checkout_onepage_savePayment>
    </events>

  •  File Observer model sẽ có hàm saveOrder() như sau:

public function saveOrder(Varien_Event_Observer $observer)
    {
        $controllerAction = $observer->getEvent()->getControllerAction();
        $response = $controllerAction->getResponse();
        $paymentResponse = Mage::helper('core')->jsonDecode($response->getBody());
        if (!isset($paymentResponse['error']) || !$paymentResponse['error']) {
            $controllerAction->getRequest()->setParam('form_key', Mage::getSingleton('core/session')->getFormKey());
            $controllerAction->getRequest()->setPost('agreement', array_flip(Mage::helper('checkout')->getRequiredAgreementIds()));
            $controllerAction->saveOrderAction();
            $orderResponse = Mage::helper('core')->jsonDecode($response->getBody());
            if ($orderResponse['error'] === false && $orderResponse['success'] === true) {
                if (!isset($orderResponse['redirect']) || !$orderResponse['redirect']) {
                        $orderResponse['redirect'] = Mage::getUrl('*/*/success');
                }
                $controllerAction->getResponse()->setBody(Mage::helper('core')->jsonEncode($orderResponse));
            }
        }
    }    

Bỏ qua bước order review trên onepage checkout

Như vậy khi khách hàng hoàn thành bước Payment, thì bước kế tiếp sẽ chuyển sang trang checkout success luôn.


Xem trên github

Thông tin kỹ thuật

Author Vu Linh
(1)

Questions and Answers

add your question

There are no entries.