Magento denetleyicisini yeniden yazma


12

Denetleyiciden _initAction adlı eylemin üzerine yazmam gerekiyor:

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

kendi modül ve denetleyicime:

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

Zaten çözmek için farklı yollar denedim: İlk yöntem nerede <from>ve <to>ben farklı kombinasyonları denedim (404 sayfa bulunamadı gösterilen):

 <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>

İkinci yöntem (Sayfa ile kurallarımı yoksay)

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

Kontrol cihazımda kalıp koydum ("tamam"); Ama görünmüyor. Belki biri yardım edebilir? Teşekkürler.


Önbellekleri temizlemeyi hatırladınız mı? Özellikle yapılandırma önbelleği?
Benubird

"Rewtire kontrolörü" mü? Bu da ne?
Buttle Butkus

Evet, önbelleğim kapalıysa.
Stoper

Üzerine yazma tamam mı? ingilizcem için özür dilerim =)
Stopper

Çocuklar Lütfen benim konu cevap
Anup Chaudhary

Yanıtlar:


15

İkinci yöntemi kullanın, ancak biraz değiştirildi. XML'niz şöyle görünmelidir:

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

Şimdi Qbikz/ToolTip/controllers/Adminhtml/Catalog/Product/AttributeController.phpbu içeriğe sahip dosyayı oluşturun :

<?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 bir dosyaya, yolunuza veya requir_once'a ihtiyaç duymanın daha iyi ne olduğunu (Mage :: getModuleDir ('controllers', 'Mage_Adminhtml'). DS.'Catalog'.DS.'Product'.DS.'AttributeController.php '); ayrıca blok ve denetleyiciyi tek bir modülde yeniden yazıp yazamayacağımızı veya blok yazmak için ve denetleyiciden ayrı modüller yazmamız gerekip gerekmediğini bilmek istiyorum.
Adnan

Her iki yol da aynı sonuca sahiptir. Ancak politik olarak% 100 doğru olmak istiyorsanız, bahsettiğiniz yöntemi kullanın. Ayrıca blokları ve denetleyicileri yeniden yazmak için aynı modülü kullanabilirsiniz.
Marius

Mage_Checkout :: CartController.php dosyasının indexAction () yöntemini geçersiz kılmaya çalışırken bu işe yaramaz gibi görünüyor.
Max

1.9.4.2'de bu benim için bir hata veriyor. Denetleyici 404 atıyor. Belki şimdi bunu yapmanın farklı bir yolu var mı? Bir ödeme denetleyicisini geçersiz
kılınca

0

Benim onestepcheckout uzantımda, yapılandırma dosyası: 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>

Bir kontrolör ekledim

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

Onepage çekirdek denetleyicisini geçersiz kılmak için

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

Bu geçersiz kılma denetleyicisinin temel kaynak kodudur:

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

class Gurutheme_Onestepcheckout_OnepageController extends Mage_Checkout_OnepageController {

}

Magento denetleyicilerini yeniden yazdığımızda, orijinal olanı dahil etmeli ve ondan uzamalıyız, tüm önceden oluşturulmuş özelliklerin çalışması için tüm yerel davranışlara yardımcı olur.


Yalnızca geçersiz kılınmış eylemlerinizde orijinal sınıfın ek (korumalı) yöntemlerine güveniyorsanız. Denetleyicinizde eksik olan tüm eylemler orijinal denetleyici tarafından gerçekleştirilecektir. Denetleyiciyi teknik olarak yeniden
yazmadığınızı

Tamamen katılıyorum, aslında yeniden yönlendiriyoruz, ancak mevcut kodu herhangi bir kodu devralmak için genişletmeliyiz
phanvugiap

-1

Kurumsal istek listesi denetleyicisini yeniden yazdım.

Benim .. De 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>

Ve IndexControlleraşağıdaki Ekle satırımda:

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

//before

class Namespace_Modulename_IndexController extends Enterprise_Wishlist_IndexController{}

Ayrıca yardımcıyı şu şekilde yeniden yazabilirsiniz: /magento//a/91474/33509

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.