Як можна видалити крок "Огляд" в касі на одній сторінці?


12

Я хотів би, щоб замовлення було оброблене після кроку способу оплати, опустивши цей Reviewкрок в Офіційну сторінку замовлення.

Чи є хтось, хто має досвід цього чи хто може вказати мені в правильному напрямку, як це зробити?

Дякую


2
FYI: Це нелегально в країнах, що приїжджають.
user487772

Я змінив крок огляду на оплату, щоб користувач міг переглянути та здійснити платіж за один етап. Які ідеї змінити цей робочий процес?
Едуардо Луз

Я вважаю це досить гарним поясненням процесу: excellencemagentoblog.com/…
ryaan_anthony

Відповіді:


9

Для одного вам потрібно переписати Mage_Checkout_Block_Onepage :: _ getStepCodes ():

 /**
 * 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');
}

Потім є частина, де ви хочете зберегти своє замовлення після кроку оплати через спостерігача за подією:

/**
 * 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));
        }
    }
}

Вищеописаний метод спостерігача неявно узгоджується з умовами та умовами. Це заборонено в деяких країнах, і ви, можливо, захочете відобразити умови та передати поля узгодження пошти на сторінці способу оплати.

Також ви можете поглянути на opcheckout.js, щоб зробити так, щоб люди не могли двічі розміщувати форму замовлення тощо ...

Це лише для того, щоб направити вас у правильному напрямку. Це не повне рішення, тому що точна реалізація залежить від бажань вашого клієнта, і я не хочу позбавляти вас задоволення від того, щоб дізнатись деталі рішення самостійно. Але ви повністю застрягнете, повідомте нас про це.


Як створити спостерігача?
Акшай Тару

Чи можете ви відредагувати публікацію, щоб створити спостерігача?
Акшай Тару

Гарне записування - це також можливо за допомогою розширення контролера, оновивши клавішу форми перед тим, як дзвонити saveOrderAction(), а потім додавши обробку відповідей, як у вашому методі спостереження.
Роббі Аверилл

0

Щоб створити свій спостерігач за подіями:

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.