Onepageチェックアウトでレビューステップを削除するにはどうすればよいですか?


12

支払い方法のステップの後に注文を処理したいのですReviewが、Onepage Checkoutのステップは省略しています。

これを経験した人、またはこれを行う正しい方向を教えてくれる人はいますか?

ありがとうございました


2
参考までに、これは来るべき国では違法です。
user487772

レビューのステップを支払いに変更しました。そのため、ユーザーは1段階でレビューして支払いを行うことができます。このワークフローを変更するためのアイデアはありますか?
エドゥアルドルス

これはプロセスの非常に良い説明であることがわかりました:excellencemagentoblog.com/…–
ryaan_anthony

回答:


9

1つについては、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を見て、shureの人々が注文フォームを2回投稿できないようにすることもできます。

これは、正しい方向に向けるだけです。正確な実装はもちろん顧客の希望に依存するため、完全なソリューションではありません。ソリューションの詳細を自分で調べる楽しさを奪いたくありません。しかし、あなたが完全に立ち往生した場合は、お知らせください。


監視サーバーを作成する方法は?
アクシェイタル

投稿を編集してオブザーバーを作成してください。
アクシェイタル

すてきな書き方-これは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>


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