컨트롤러 마 젠토 다시 쓰기


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.