Menulis ulang magento pengontrol

12

Saya perlu menimpa tindakan yang disebut _initAction dari Controller:

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

ke dalam modul dan pengontrol saya sendiri:

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

Saya sudah mencoba berbagai cara untuk menyelesaikannya: Metode pertama di mana <from>dan <to>saya mencoba berbagai kombinasi (Menampilkan 404 halaman tidak ditemukan):

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

Metode kedua (Halaman ditampilkan dengan mengabaikan aturan saya):

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

Di controller saya, saya meletakkan die ("ok"); Tapi itu tidak muncul. Mungkin seseorang bisa membantu? Terima kasih.

Sumbat
sumber
Apakah Anda ingat untuk menghapus cache? Terutama cache konfigurasi?
Benubird
"Pengontrol Rewtire"? Apa itu?
Buttle Butkus
Ya, cache saya jika tidak aktif.
Stopper
Timpa tidak apa-apa? maaf untuk bahasa inggris saya =)
Stopper

Jawaban:

15

Gunakan metode kedua tetapi sedikit dimodifikasi. XML Anda akan terlihat seperti ini:

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

Sekarang buat file Qbikz/ToolTip/controllers/Adminhtml/Catalog/Product/AttributeController.phpdengan konten ini:

<?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
sumber
@Marius apa yang lebih baik untuk memerlukan file, jalan Anda atau require_once (Mage :: getModuleDir ('controllers', 'Mage_Adminhtml'). DS.'Catalog'.DS.'Product'.DS.'AttributeController.php '); selain itu saya ingin tahu apakah kita dapat menulis ulang blok dan pengontrol dalam satu modul atau kita harus menulis modul terpisah untuk menulis blok dan daripada pengontrol.
Adnan
Kedua cara tersebut memiliki hasil yang sama. Tetapi jika Anda ingin 100% benar secara politis, gunakan metode yang Anda sebutkan. Anda juga dapat menggunakan modul yang sama untuk menulis ulang blok dan pengontrol.
Marius
Ini sepertinya tidak berfungsi ketika mencoba menimpa indexAction () dari Mage_Checkout :: CartController.php.
Max
Di 1.9.4.2 ini membuat kesalahan untuk saya. Pengontrol melempar 404. Mungkin ada cara berbeda untuk melakukannya sekarang? Itu terjadi pada saya ketika
mengganti
0

Dalam ekstensi onestepcheckout saya, file konfigurasi: 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>

Saya menambahkan controller

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

untuk mengganti pengontrol inti Onepage

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

Ini adalah kode sumber dasar pengontrol utama:

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

class Gurutheme_Onestepcheckout_OnepageController extends Mage_Checkout_OnepageController {

}

Hal utama yang ketika menulis ulang pengontrol magento, kita harus memasukkan yang asli dan memperluas dari itu, itu membantu semua perilaku asli sebelum sehingga semua fitur pra-dibangun akan bekerja.

phanvugiap
sumber
Hanya jika Anda mengandalkan metode tambahan (yang dilindungi) dari kelas asli dalam tindakan yang diganti. Semua tindakan yang hilang di controller Anda akan ditangani oleh controller asli. Perhatikan bahwa Anda secara teknis tidak menulis ulang controller tetapi menambahkannya ke daftar penangan untuk nama depan
Fabian Schmengler
Sepenuhnya setuju, kami benar-benar merutekan ulang tetapi harus memperpanjang yang asli untuk mewarisi kode yang ada
phanvugiap
-1

Saya menulis ulang pengontrol daftar harapan perusahaan.

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

Dan di IndexControllerbaris Tambahkan saya di bawah ini:

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

//before

class Namespace_Modulename_IndexController extends Enterprise_Wishlist_IndexController{}

Anda juga dapat menulis ulang pembantu seperti ini: /magento//a/91474/33509

vritika nigam
sumber