Onepage kasasındaki İnceleme adımını nasıl kaldırabilirim?


12

Siparişin Ödeme Yöntemi adımından sonra Review, Onepage Checkout'taki adımı atlayarak işlenmesini istiyorum.

Bununla ilgili tecrübesi olan veya bunu nasıl yapacağım konusunda beni doğru yöne yönlendirebilecek biri var mı?

teşekkür ederim


2
FYI: Bu, bazı ülkelerde yasa dışı.
user487772 17:13

İnceleme adımını ödeme olacak şekilde değiştirdim, böylece kullanıcı ödemeyi bir aşamada inceleyebilir ve yapabilir. Bu iş akışını değiştirmek için bazı fikirler?
Eduardo Luz

Bunu sürecin oldukça iyi bir açıklaması olarak buldum: excellencemagentoblog.com/…
ryaan_anthony

Yanıtlar:


9

Biri için Mage_Checkout_Block_Onepage :: _ getStepCodes () 'i yeniden yazmanız gerekir:

 /**
 * Get checkout steps codes
 *
 * @return array
 */
protected function _getStepCodes()
{
    /**
     * Originally these were 'login', 'billing', 'shipping', 'shipping_method', 'payment', 'review'
     *
     * Stripping steps here has an influence on the entire checkout. There are more instances of the above list
     * among which the opcheckout.js file. Changing only this method seems to do the trick though.
     */
    if ($this->getQuote()->isVirtual()) {
        return array('login', 'billing', 'payment');
    }
    return array('login', 'billing', 'shipping', 'shipping_method', 'payment');
}

Ardından, ödeme adımından sonra siparişinizi bir olay gözlemcisi aracılığıyla kaydetmek istediğiniz bölüm vardır:

/**
 * THIS METHOD IMMEDIATELY FORWARDS TO THE SAVE ORDER ACTION AFTER THE PAYMENT METHOD ACTION
 *
 * Save the order after having saved the payment method
 *
 * @event controller_action_postdispatch_checkout_onepage_savePayment
 *
 * @param $observer Varien_Event_Observer
 */
public function saveOrder($observer)
{
    /** @var $controllerAction Mage_Checkout_OnepageController */
    $controllerAction = $observer->getEvent()->getControllerAction();
    /** @var $response Mage_Core_Controller_Response_Http */
    $response = $controllerAction->getResponse();

    /**
     * jsonDecode is used because the response of the XHR calls of onepage checkout is always formatted as a json
     * string. jesonEncode is used after the response is manipulated.
     */
    $paymentResponse = Mage::helper('core')->jsonDecode($response->getBody());
    if (!isset($paymentResponse['error']) || !$paymentResponse['error']) {
        /**
         * If there were no payment errors, immediately forward to saving the order as if the user had confirmed it
         * on the review page.
         */
        $controllerAction->getRequest()->setParam('form_key', Mage::getSingleton('core/session')->getFormKey());

        /**
         * Implicitly agree with the terms and conditions by confirming the order
         */
        $controllerAction->getRequest()->setPost('agreement', array_flip(Mage::helper('checkout')->getRequiredAgreementIds()));

        $controllerAction->saveOrderAction();
        /**
         * jsonDecode is used because the response of the XHR calls of onepage checkout is always formatted as a json
         * string. jesonEncode is used after the response is manipulated.
         *
         * $response has here become the response of the saveOrderAction()
         */
        $orderResponse = Mage::helper('core')->jsonDecode($response->getBody());
        if ($orderResponse['error'] === false && $orderResponse['success'] === true) {
            /**
             * Check for redirects here. If there are redirects than a module such as Adyen wants to redirect to a
             * payment page instead of the success page after saving the order.
             */
            if (!isset($orderResponse['redirect']) || !$orderResponse['redirect']) {
                $orderResponse['redirect'] = Mage::getUrl('*/*/success');
            }
            $controllerAction->getResponse()->setBody(Mage::helper('core')->jsonEncode($orderResponse));
        }
    }
}

Yukarıdaki gözlemci yöntem, şartlar ve koşulları dolaylı olarak kabul eder. Bu, bazı ülkelerde yasa dışıdır ve şartları görüntülemek ve ödeme yöntemi sayfasındaki kabul edilen posta alanlarını iletmek isteyebilirsiniz.

Ayrıca shure insanların sipariş formunu iki kez gönderememeleri için opcheckout.js'ye göz atmak isteyebilirsiniz ...

Bu sizi doğru yöne yönlendirmektir. Tam bir çözüm değildir, çünkü kesin uygulama müşterinizin isteklerine bağlıdır ve sizi çözümün ayrıntılarını kendiniz bulma eğlencesinden kurtarmak istemiyorum. Ama tamamen sıkışıp kaldınız, lütfen bize bildirin.


Bir obeserver nasıl oluşturulur?
Akshay Taru

Gözlemci oluşturmak için gönderiyi düzenleyebilir misiniz?
Akshay Taru

Güzel yazma - bu, aramadan önce form anahtarını yenileyip saveOrderAction(), ardından gözlemci yönteminizde olduğu gibi yanıt işlemeyi ekleyerek bir denetleyici uzantısı ile de mümkündür .
Robbie Averill

0

Etkinlik Gözlemcinizi oluşturmak için:

<controller_action_postdispatch_checkout_onepage_savePayment> <observers> <Name_Event_Observer> <class>module/observer</class> <method>method</method> </Name_Event_Observer> </observers> </controller_action_postdispatch_checkout_onepage_savePayment>


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.