컨트롤러 마 젠토 다시 쓰기


12

컨트롤러에서 _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>

두 번째 방법 (내 규칙을 무시하고 표시되는 페이지) :

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

내 컨트롤러에는 die ( "ok"); 그러나 나타나지 않습니다. 누군가 도울 수 있을까요? 감사.


캐시를 지우는 것을 기억하십니까? 특히 구성 캐시?
— Benubird

"리필 러 컨트롤러"? 그게 뭐야?
— Buttle Butkus

예, 캐시가 꺼져 있습니다.
— 스토퍼

덮어 쓰기는 괜찮습니까? 내 영어로 죄송합니다 =)
— Stopper

답변:


15

두 번째 방법을 사용하지만 약간 수정되었습니다. 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 '); 또한 단일 모듈에서 블록과 컨트롤러를 다시 쓸 수 있는지 또는 블록과 컨트롤러보다 별도의 모듈을 작성 해야하는지 알고 싶습니다.
— Adnan

두 가지 방법 모두 동일한 결과를 얻습니다. 그러나 100 % 정치적으로 올바른 사람이 되려면 언급 한 방법을 사용하십시오. 또한 동일한 모듈을 사용하여 블록과 컨트롤러를 다시 쓸 수 있습니다.
— Marius

Mage_Checkout :: CartController.php의 indexAction ()을 재정의하려고 할 때 작동하지 않는 것 같습니다.
— Max

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 {

}

마 젠토 컨트롤러를 다시 작성할 때 가장 중요한 것은 원래 컨트롤러를 포함하고 확장해야 사전 빌드 된 모든 기능이 작동하기 전에 모든 기본 동작에 도움이됩니다.


재정의 된 작업에서 원래 클래스의 추가 (보호 된) 메서드에 의존하는 경우에만 해당됩니다. 컨트롤러에서 누락 된 모든 작업은 원래 컨트롤러에서 처리합니다. 기술적으로 컨트롤러를 다시 쓰지 않고 프론트 네임의 핸들러 목록에 추가 하십시오.
— Fabian Schmengler

완전히 동의, 우리는 실제로 그것을 다시 라우팅하지만 기존 코드를 상속하기 위해 원래 코드를 확장해야합니다
— 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{}

다음과 같이 도우미를 다시 작성할 수도 있습니다. /magento//a/91474/33509

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.