コントローラーの書き換え


12

Controllerから_initActionというアクションを上書きする必要があります。

/app/code/core/Mage/Adminhtml/controllers/Catalog/Product/AttributeController.php

自分のモジュールとコントローラーに:

/app/code/local/Qbikz/ToolTip/controllers/Adminhtml/Catalog/Product/AttributeController.php

私はすでにそれを解決するさまざまな方法を試みた:第一の方法<from><to>私は(見つからない404ページを表示)さまざまな組み合わせを試してみました:

 <rewrite>
     <qbikz_tooltip_adminhtml_catalog_product_attribute>
         <from><![CDATA[#^/adminpanel/catalog_product_attribute/edit/#]]></from>
         <to>/tooltip/adminhtml_catalog_product_attribute/init/</to>
     </qbikz_tooltip_adminhtml_catalog_product_attribute>
</rewrite>

+

 <frontend>
        <routers>
            <qbikz_tooltip>
                <use>admin</use>
                <args>
                    <module>Qbikz_ToolTip</module>
                    <frontName>catalog_product_attribute</frontName>
                </args>
            </qbikz_tooltip>
        </routers>
    </frontend>

2番目の方法(ルールを無視して表示するページ):

<admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <Qbikz before="Mage_Adminhtml_Catalog_Product">Qbikz_ToolTip_Adminhtml_Catalog_Product</Qbikz>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>

私のコントローラーにはdie( "ok"); しかし、それは現れていません。たぶん誰かが助けることができますか?ありがとう。


キャッシュをクリアすることを覚えていましたか?特に構成キャッシュ?
ベヌバード

「コントローラーの回転」?あれは何でしょう?
バトルビュータス

はい、キャッシュがオフの場合。
ストッパー

上書きしても大丈夫ですか?申し訳ありませんが私の英語=)
ストッパー

Guysは、私のスレッド答えてくださいmagento.stackexchange.com/questions/98758/...
Anup Chaudharyさん

回答:


15

2番目の方法を使用しますが、少し変更します。XMLは次のようになります。

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <Qbikz_ToolTip before="Mage_Adminhtml">Qbikz_ToolTip_Adminhtml</Qbikz_ToolTip>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>

次にQbikz/ToolTip/controllers/Adminhtml/Catalog/Product/AttributeController.php、このコンテンツでファイルを作成します。

<?php 
require_once 'Mage/Adminhtml/controllers/Catalog/Product/AttributeController.php';
class Qbikz_ToolTip_Adminhtml_Catalog_Product_AttributeController extends Mage_Adminhtml_Catalog_Product_AttributeController {
   protected function _initAction(){
       //your magic here
   }
}

@Mariusファイル、あなたの方法、またはrequire_once(Mage :: getModuleDir( 'controllers'、 'Mage_Adminhtml')。DS.'Catalog'.DS.'Product'.DS.'AttributeController.php '); さらに、単一のモジュールでブロックとコントローラーを書き換えることができるのか、ブロックとコントローラーではなく別のモジュールを記述する必要があるのか​​を知りたいです。
アドナン

どちらの方法でも同じ結果が得られます。しかし、100%政治的に正しいことを望むなら、あなたが言及した方法を使用してください。また、同じモジュールを使用してブロックとコントローラーを書き換えることができます。
マリウス

これは、Mage_Checkout :: CartController.phpのindexAction()をオーバーライドしようとすると機能しないようです。
マックス

1.9.4.2では、これは私にエラーを投げています。コントローラーは404をスローします。おそらく今、別の方法がありますか?チェックアウトコントローラーをオーバーライドするときに私に起こっている
-gabtzi

0

私のonestepcheckout拡張機能の構成ファイル:app / code / local / Gurutheme / Onestepcheckout / etc / config.xml

<frontend>
        <routers>
             <checkout>
                <args>
                    <modules>
                        <Gurutheme_Onestepcheckout before="Mage_Checkout">Gurutheme_Onestepcheckout</Gurutheme_Onestepcheckout>
                    </modules>
                </args>
            </checkout>
        </routers>
</frontend>

コントローラーを追加しました

app/code/local/Gurutheme/Onestepcheckout/controllers/OnepageController.php

Onepageコアコントローラーをオーバーライドするための

app/code/core/Mage/Checkout/controllers/OnepageController.php

これは、そのオーバーライドコントローラーの基本的なソースコードです。

require_once("Mage/Checkout/controllers/OnepageController.php");

class Gurutheme_Onestepcheckout_OnepageController extends Mage_Checkout_OnepageController {

}

magentoコントローラーを書き換えるときは、元のコントローラーを含めて拡張する必要があります。これは、事前に構築されたすべての機能が機能する前に、すべてのネイティブ動作を支援します。


オーバーライドされたアクションで元のクラスの追加の(保護された)メソッドに依存している場合のみ。コントローラーにないアクションはすべて、元のコントローラーによって処理されます。技術的にはコントローラーを書き直さずに、フロントネームのハンドラーのリストに追加することに注意してください
ファビアンシュメングラー

完全に同意し、実際にルートを変更しますが、既存のコードを継承するために元のコードを拡張する必要があります
-phanvugiap

-1

エンタープライズウィッシュリストコントローラーを書き直しました。

私の config.xml

<frontend>
    <routers>
        <wishlist>
            <args>
                <modules>
                    <namespace_modulename before="Enterprise_Wishlist">Namespace_Modulename</namespace_modulename>
                </modules>
                <module>Namespace_Modulename</module>
                <frontName>shoppinglist</frontName>
            </args>
        </wishlist>
    </routers>
</frontend>

そして、私のIndexController下の行で:

require_once 'Enterprise/Wishlist/controllers/IndexController.php';

//before

class Namespace_Modulename_IndexController extends Enterprise_Wishlist_IndexController{}

次のようにヘルパーを書き換えることもできますhttps : //magento.stackexchange.com/a/91474/33509

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