4

ローカル プールのカスタム コントローラーを使用して、コア Onepagecontroller をオーバーロード/再書き込みしようとしていますが、機能していません。私はMagento 1.5.1を使用しています

ここに私のファイル構造とコードがあります:

コントローラ ファイル: \app\code\local\Odc\Mycheckout\controllers\OnepageController.php

    require_once 'Mage/Checkout/controllers/OnepageController.php';

    class Odc_Mycheckout_OnepageController extends Mage_Checkout_OnepageController
    {   
        public function indexAction()
        {
            echo "This controller has been overridden.";
        }
    }

config.xml ファイル: \app\code\local\Odc\Mycheckout\etc\config.xml

    <?xml version="1.0"?>
    <config>
        <modules>
            <Odc_Mycheckout>
                <version>0.0.1</version>
            </Odc_Mycheckout>
        </modules>
        <global>
            <controllers>
                <Mage_Checkout>
                    <rewrite>
                        <onepage>Odc_Mycheckout_Onepage</onepage>
                    </rewrite>
                </Mage_Checkout>
            </controllers>
        </global>
        <frontend>
            <routers>
                <mycheckout>
                   <args>
                        <modules>
                            <Odc_Mycheckout before="Mage_Checkout">Odc_Mycheckout</Odc_Mycheckout>
                        </modules>
                   </args>
                </mycheckout>
            </routers>
        </frontend>
    </config>

Odc_Mycheckout.xml ファイル: \app\etc\module\Odc_Mycheckout.xml

    <?xml version="1.0"?>
    <config>
      <modules>
        <Odc_Mycheckout>
          <active>true</active>
          <codepool>local</codepool>
        </Odc_Mycheckout>
      </modules>
    </config>
4

2 に答える 2

6

キャメルケースが再び襲ってきます。

Odc_Mycheckout.xml ファイル: \app\etc\module\Odc_Mycheckout.xml

    <?xml version="1.0"?>
    <config>
      <modules>
        <Odc_Mycheckout>
          <active>true</active>
          <codePool>local</codePool> <!-- Capital P in pool -->

また、モジュール構成ファイルで:

    <frontend>
        <routers>
            <checkout> <!-- must match the router config you are trying to override -->
               <args>
                    <modules>
                        <Odc_Mycheckout before="Mage_Checkout">Odc_Mycheckout</Odc_Mycheckout>
                    </modules>
               </args>
            </checkout>
        </routers>
    </frontend>

編集:

書き換えられたコントローラーが機能しない場合のトラブルシューティングには、基本に戻ることが役立ちます。1 つのアプローチは、 と同じメソッドを使用することMage_Core_Controller_Varien_Router_Standardです。スクリプトtest.phpで:

<?php

ini_set('display_errors',1);
include 'app/Mage.php';
Mage::setIsDeveloperMode(true);
Mage::app();

$module     = 'Odc_Mycheckout';
$controller = 'Onepage';

$router     = new Mage_Core_Controller_Varien_Router_Standard;
$filename   = $router->getControllerFileName($module,$controller);
$classname  = $router->getControllerClassName($module,$controller);

include $filename;

$controller = Mage::getControllerInstance(
    $classname,
    Mage::app()->getRequest(),
    Mage::app()->getResponse()
);

var_dump($controller); //should be a  class
于 2012-10-23T15:28:35.613 に答える
0

以下のタグは必要ありません。

   <global>
        <controllers>
            <Mage_Checkout>
                <rewrite>
                    <onepage>Odc_Mycheckout_Onepage</onepage>
                </rewrite>
            </Mage_Checkout>
        </controllers>
    </global>
于 2012-10-23T20:01:38.837 に答える