0

私はこれを理解するために最善を尽くしましたが、Magentoで次のコントローラーをオーバーライドすることができないようです:

メイジ/コア/コントローラー/バリアン/アクション

現在、自分の拡張機能用に次のファイルがあります。

app / local / MyCompany / MyModule / Core / Controller / Front / Action.php

app / local / MyCompany / MyModule / Core / etc / config.xml

app / etc / modules / MyCompany_MyModule.xml

私の混乱はconfig.xmlにあります。以前、 controllersディレクトリにあるControllersを上書きしましたが、Controllerは上書きしませんでした。違いや、Controllerディレクトリ内のファイルをオーバーライドする方法が異なるかどうかは完全にはわかりません。

これが私のconfig.xmlにあるものです

    <?xml version="1.0"?>
    <config>
        <modules>
            <MyCompany_MyModule>
                <version>0.0.1</version>
            </MyCompany_MyModule>
        </modules>
        <global>
            <controller>
                <Mage_Core>
                    <rewrite>
                        <front_action>MyCompany_MyModule_Core_Controller_Front_Action</front_action>
                    </rewrite>
                </Mage_Core>
            </controllers>
        </global>
    </config>

誰かが私に欠けているものを教えてもらえますか?

4

3 に答える 3

4

Magento で構成されたクラス名の書き換えを介して、目的を達成することはできません。スーパークラス (他のクラスはそこから拡張されます) を変更していることに気付いた場合、クラス定義の検出は からのオートロード ロジックによって行われVarien_Autoload::autoload()ます。

このクラスの定義を変更する必要がある場合は、ファイル全体をapp/code/local/Mage/Core/Controller/Varien/にコピーして、そこで変更を加えることができます。Magento をアップグレードするときはいつでも、更新をこのクラスにマージする必要があります。

于 2012-04-13T17:51:45.973 に答える
0

Controller の機能を変更したこともありますが、最終的には元の Controller を上書きするのではなく、パッチを適用しただけだと思います。私は間違っているかもしれませんが、Magento は Controller クラスの上書きをサポートしていないと思います。

私が正しく思い出せば、それらはいくつかの時点でコード内で静的に呼び出されることさえあります。

于 2012-04-13T16:48:45.333 に答える
0

magentoコントローラーでの宣言以来

class Mage_Catalog_ProductController extends Mage_Core_Controller_Front_Action

クラスを直接拡張する場合。私がやったことは、どういうわけかすべてのコントローラーを交換することです。

class Mage_Catalog_ProductController extends MyCompany_Core_Controller_Front_Action

すべてのコントローラーを交換するには、この Linux コマンドを使用します

find app/code/core/Mage/*/controllers/ -name "*.php" -print | xargs sed -i 's/Mage_Core_Controller_Front_Action/MyCompany_Core_Controller_Front_Action/g'

于 2013-05-21T08:37:05.490 に答える