6

上記を行いたいと思います。過去に多くのファイルをオーバーライドしました...ブロック、モデル、ヘルパー....しかし、これは私を逃します。

誰でも私がここで間違っていることを見ることができますか:(このコードを編集して...いくつかの推奨事項を含めるようにしました...)

Heres 私のフォルダー構造 (テストとして 2 つのコントローラーの場所):

/Idigital/Idgeneral/etc/config.xml
/Idigital/Idgeneral/controllers/Checkout/CartController.php
/Idigital/Idgeneral/controllers/CartController.php

ここに私のconfig.xmlがあります:

<?xml version="1.0"?>
<config>
<modules>
    <idigital_idgeneral>
    <version>0.1.0</version>
    </idigital_idgeneral>
</modules>
<global>
<blocks>
        <idgeneral><class>Idigital_Idgeneral_Block</class></idgeneral>
    </blocks>
</global>   

<frontend>
    <routers>
                <checkout>
                    <use>standard</use>
                    <args>
                        <modules>
                            <Idigital_Idgeneral before="Mage_Checkout">Idigital_Idgeneral_Checkout</Idigital_Idgeneral>
                        </modules>
                    </args>
                </checkout>
           </routers>
       <layout>   
        <updates>   
            <idgeneral>   
                <file>idigital.xml</file>   
            </idgeneral>   
        </updates>   
    </layout>
</frontend>
</config>

テストするために、コントローラーファイルを2つの場所に配置しました。そして、私の FIRST コントローラ ファイルの先頭を以下に示します。

require_once 'Mage/Checkout/controllers/CartController.php';
class Idigital_Idgeneral_Checkout_CartController extends Mage_Checkout_CartController
{


public function testAction()
{  
    var_dump('inside checkout/cart/test');exit; 
}

/**
 * Add product to shopping cart action
 */
public function addAction()
{
    blah...
}

私の2番目のコントローラーに答えてください:

require_once 'Mage/Checkout/controllers/CartController.php';
class Idigital_Idgeneral_CartController extends Mage_Checkout_CartController
{


public function testAction()
{  
    var_dump('inside cart/test');exit; 
}

/**
 * Add product to shopping cart action
 */
public function addAction()
{
    blah...
}

私がアクセスしたとき: /checkout/cart/add 私は mage コントローラーに誘導されました...私のローカルではありません。(私はそれぞれにvar_dump stmtsを持っています..だから、どれが実行されたかを見ることができます)。

/checkout/cart/test にアクセスすると - 404 が表示されます /cart/add または cart/test にアクセスすると - idgeneral/cart/test または idgeneral/cart/add にアクセスすると 404 が表示されます - 404 が表示されます

4

5 に答える 5

7
于 2012-10-09T05:02:44.037 に答える
6
<Idigital_Idgeneral before="Mage_Checkout">Idgeneral_Checkout</Idigital_Idgeneral>

する必要があります

<Idigital_Idgeneral before="Mage_Checkout">Idigital_Idgeneral_Checkout</Idigital_Idgeneral>

または、カスタムコントローラーを上に移動してみてください

../Idigital/Idgeneral/controllers/CartController.php

と使用

<Idigital_Idgeneral before="Mage_Checkout">Idigital_Idgeneral</Idigital_Idgeneral>

<modules>タグの位置にも誤りがあります。そのはず:

<config>
    <modules>
        <idigital_idgeneral>
            <version>0.1.0</version>
        </idigital_idgeneral>
    </modules>
    <global>
    ...
    </global>   

    <frontend>
        ....
    </frontend>
...
</config>

つまり<modules>、入ってはいけない<global>

Magento が XML として認識している構成ツリーをダンプする方法に関する優れたチュートリアルを次に示します: http://alanstorm.com/magento_config

于 2012-07-05T19:21:48.903 に答える
3

このジャロピーを扱うことを余儀なくされた次の貧弱な開発者のために、私はこれをここに残しておきます. ここでの指示の多くは、そのソースのように、誤った方向のねじれた迷路であるマジェントのドキュメントから貼り付けられています。十分な苦情があります...

これはバージョン1.8でうまくいきました

名前空間とモジュールを作成します: /app/code/local/MyNameSpace/MyModule

モジュール構成を作成します: /app/code/local/MyNameSpace/MyModule/etc/config.xml

<?xml version="1.0" ?>
<config>
<modules>
    <MyNameSpace_MyModule>
        <version>0.1.0</version>
    </MyNameSpace_MyModule>
</modules>
<frontend>
    <routers>
        <checkout>
            <args>
                <modules>
                    <MyNameSpace_MyModule before="Mage_Checkout">MyNameSpace_MyModule_Checkout</MyNameSpace_MyModule>
                </modules>
            </args>
        </checkout>
    </routers>
</frontend>

コントローラーを作成します: /app/code/local/MyNameSpace/MyModule/controllers/Checkout/CartController.php

<?php

require_once Mage::getModuleDir('controllers', 'Mage_Checkout').DS.'CartController.php';

class MyNameSpace_MyModule_Checkout_CartController extends Mage_Checkout_CartController
{
    public function indexAction() {
        // /var/log/debug.log should log the output
        Mage::log('cart index override', null, 'debug.log');

        // Call the parent class
        parent::indexAction();
    }
}

新しいモジュールを有効にします: /app/etc/modules/MyNameSpace_All.xml

<?xml version="1.0" ?>
<config>
  <modules>
    <MyNameSpace_MyModule>
        <active>true</active>
        <codePool>local</codePool>
    </MyNameSpace_MyModule>
  </modules>
</config>

必要なのはそれだけです。さあ、お祝いに行きましょう。糞を磨いたばかりです。;)

于 2014-05-21T19:54:21.260 に答える
0

まあ...チェックアウトカートコントローラーをオーバーライドしません。

そこで、記事の下部にある PRODUCT VIEW の URL REWRITE を使用しました...このリンクから...。彼らはそれが適切な方法だと言っています...

http://www.excellencemagentoblog.com/magento-add-product-to-cart-ajax

if(!url){
      url = jQuery('#product_addtocart_form').attr('action');
}
url = url.replace("checkout/cart","idgeneral/cart");

それは私のために働いた。私はクラッキングを得ることができます。基本的に、チェックアウトコントローラーの代わりに MY コントローラーを呼び出します。

ROSCIUSの助けに感謝します...感謝します。

また、構成を変更する必要がありました....ルーターセクションは次のようになりました。

<routers>
        <!-- THIS PART REGISTERS OUR CONTROLLERS FOLDER FOR USE -->
        <idgeneral>
            <use>standard</use>
            <args>
                <module>Idigital_Idgeneral</module>
                <frontName>idgeneral</frontName>
            </args>
        </idgeneral>

        <!-- THIS PART WONT WORK TO OVERWRITE OUR MAGE CONTROLLER -->
        <checkout>
            <use>standard</use>
            <args>
                <modules>
                    <Idigital_Idgeneral before="Mage_Checkout">Idigital_Idgeneral_Checkout</Idigital_Idgeneral>
                </modules>
            </args>
        </checkout>
    </routers>
于 2012-07-06T08:38:03.523 に答える