自定义单页控制器未覆盖


Custom onepage controller is not overwritting

我使用的是magnet 1.6,我正试图用本地池中的自定义控制器重写核心Onepagecontroller。

到目前为止,它还可以工作,但当我安装其他带有自定义Onepagecontroller的支付模块时,"它不工作"。

磁电机没有读取我的自定义OnepageController,磁电机只是从其他模块读取自定义Onepage控制器

这是我的文件结构和代码:

我的自定义OnepageController:''app''code''local''SSprint''Migs''controllers''Checkout''OnepageController.php

config.xml文件:''app''code''local''SSprint''Migs''etc''config.xml

    <?xml version="1.0"?>
<config>
    <modules>
      <Sprint_Migs>
          <version>1.0.0</version>
      </Sprint_Migs>
    </modules>
    <global>
      <models>
          <migs>
            <class>Sprint_Migs_Model</class>
          </migs>
      </models>
    <helpers>
      <migs>
        <class>Sprint_Migs_Helper</class>
      </migs>
    </helpers>
    <blocks>
          <migs>
            <class>Sprint_Migs_Block</class>
          </migs>
      </blocks>
      <resources>
            <migs_setup>
                <setup>
                    <module>Sprint_Migs</module>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </migs_setup>
            <migs_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </migs_write>
            <migs_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </migs_read>
        </resources>
    </global>
    <default>
      <payment>
          <migs>
            <model>migs/migs</model>
            <active>1</active>
            <order_status>pending</order_status>
            <title>VISA / MasterCard</title>
            <allowspecific>0</allowspecific>
            <sort_order>1</sort_order>
          </migs>
      </payment>
  </default>
    <frontend>
      <layout>
            <updates>
                <migs module="Sprint_Migs">
                    <file>migs.xml</file>
                </migs>
            </updates>
        </layout>
      <routers>
          <migs>
            <use>standard</use>
            <args>
                <module>Sprint_Migs</module>
                <frontName>migs</frontName>
            </args>
          </migs>
          <checkout>
                <use>standard</use>
                <args>
                    <modules>
                        <Sprint_Migs_Checkout before="Mage_Checkout">Sprint_Migs_Checkout</Sprint_Migs_Checkout>
                    </modules>
                </args>
            </checkout>
      </routers>
    </frontend>
</config>

这是我的自定义单页控制器

<?php
require_once Mage::getModuleDir('controllers', 'Mage_Checkout') . DS . 'OnepageController.php';
class Sprint_Migs_Checkout_OnepageController extends Mage_Checkout_OnepageController {
    public function saveOrderAction()
    {
        if ($this->_expireAjax()) {
            return;
        }
        $result = array();
        try {
            if ($requiredAgreements = Mage::helper('checkout')->getRequiredAgreementIds()) {
                $postedAgreements = array_keys($this->getRequest()->getPost('agreement', array()));
                if ($diff = array_diff($requiredAgreements, $postedAgreements)) {
                    $result['success'] = false;
                    $result['error'] = true;
                    $result['error_messages'] = $this->__('Please agree to all the terms and conditions before placing the order.');
                    $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
                    return;
                }
            }
            if ($data = $this->getRequest()->getPost('payment', false)) {
                if ($data['method'] == 'migs'){
                    $fields = array();
                    $fields['quoteID'] = Mage::getSingleton('checkout/session')->getQuoteId();
                    $fields['siteID'] = $data['site_id'];
                    $write = Mage::getSingleton( 'core/resource' )->getConnection( 'core_write' );
                    $table = Mage::getSingleton( 'core/resource' )->getTableName( 'sprint_migs' );
                    $write->insert($table, $fields);        
                }
                $this->getOnepage()->getQuote()->getPayment()->importData($data);
            }
            $this->getOnepage()->saveOrder();

            $redirectUrl = $this->getOnepage()->getCheckout()->getRedirectUrl();
            $result['success'] = true;
            $result['error']   = false;
        } catch (Mage_Payment_Model_Info_Exception $e) {
            $message = $e->getMessage();
            if( !empty($message) ) {
                $result['error_messages'] = $message;
            }
            $result['goto_section'] = 'payment';
            $result['update_section'] = array(
                'name' => 'payment-method',
                'html' => $this->_getPaymentMethodsHtml()
            );
        } catch (Mage_Core_Exception $e) {
            Mage::logException($e);
            Mage::helper('checkout')->sendPaymentFailedEmail($this->getOnepage()->getQuote(), $e->getMessage());
            $result['success'] = false;
            $result['error'] = true;
            $result['error_messages'] = $e->getMessage();
            if ($gotoSection = $this->getOnepage()->getCheckout()->getGotoSection()) {
                $result['goto_section'] = $gotoSection;
                $this->getOnepage()->getCheckout()->setGotoSection(null);
            }
            if ($updateSection = $this->getOnepage()->getCheckout()->getUpdateSection()) {
                if (isset($this->_sectionUpdateFunctions[$updateSection])) {
                    $updateSectionFunction = $this->_sectionUpdateFunctions[$updateSection];
                    $result['update_section'] = array(
                        'name' => $updateSection,
                        'html' => $this->$updateSectionFunction()
                    );
                }
                $this->getOnepage()->getCheckout()->setUpdateSection(null);
            }
        } catch (Exception $e) {
            Mage::logException($e);
            Mage::helper('checkout')->sendPaymentFailedEmail($this->getOnepage()->getQuote(), $e->getMessage());
            $result['success']  = false;
            $result['error']    = true;
            $result['error_messages'] = $this->__('There was an error processing your order. Please contact us or try again later.');
        }
        $this->getOnepage()->getQuote()->save();
        if (isset($redirectUrl)) {
            $result['redirect'] = $redirectUrl;
        }
        $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
    }   
}

您在config.xml中做了很好的工作,但最好删除签出的<use>standard</use>节点。

另外,你在上课前需要原始控制器吗?它应该是这样的:

<?php
require_once Mage::getModuleDir('controllers', 'Mage_Checkout') . DS . 'OnepageController.php';
class Sprint_Migs_Checkout_OnepageController 
           extends Mage_Checkout_OnepageController
{
    /* Your New / Overrided Functions */
}

问题解决了,我使用observer事件也捕获了自定义字段并保存到自定义表中

但我只想知道,使用observer事件和覆盖onepage控制器有什么不同?