Перепишіть контролер magento


12

Мені потрібно перезаписати дію під назвою _initAction з Controller:

/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 ("добре"); Але це не відображається. Може хтось міг допомогти? Дякую.


Ви пам'ятали, щоб очистити кеші? Зокрема кеш конфігурації?
— Benubird

"Контролер перенапрягу"? Що це?
— Buttle Butkus

Так, мій кеш, якщо вимкнено.
— Зупинка

Перезапис - це нормально? вибачте за мою англійську =)
— Зупинка

Хлопці, будь ласка, дайте відповідь на мою тему- magento.stackexchange.com/questions/98758/…
— Chaudhary

Відповіді:


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, що краще вимагати файл, ваш спосіб або requ_once (Mage :: getModuleDir ('контролери', 'Mage_Adminhtml'). DS.'Catalog'.DS.'Product'.DS.'AttributeController.php '); крім того, я хочу знати, чи можемо ми переписати блок і контролер в один модуль або нам потрібно написати окремі модулі для запису блоку і ніж контролер.
— Аднан

Обидва способи мають однаковий результат. Але якщо ви хочете бути 100% політично коректними, скористайтеся згаданим вами методом. Також ви можете використовувати той самий модуль, щоб переписати блоки та контролери.
— Маріус

Схоже, це не спрацьовує при спробі змінити indexAction () Mage_Checkout :: CartController.php.
— Макс

У 1.9.4.2 це помилка для мене. Контролер кидає 404. Можливо, зараз є інший спосіб зробити це? Це трапляється зі мною, коли
— скасовується

0

У моєму розширенні onestepcheckout, файл конфігурації: app / code / local / Gurutheme / Onestepcheckout / тощо / 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

для переключення основного контролера однієї сторінки

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

Це основний вихідний код цього переважаючого контролера:

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

class Gurutheme_Onestepcheckout_OnepageController extends Mage_Checkout_OnepageController {

}

Головне, що при перезаписі контролерів magento ми повинні включати оригінальний та продовжувати з нього, це допомагає всій рідній поведінці до того, як усі заздалегідь створені функції спрацювали.


Тільки якщо ви покладаєтесь на додаткові (захищені) методи оригінального класу у своїх перекритих діях. Усі дії, відсутні в контролері, будуть оброблятися оригінальним контролером. Зауважте, що ви технічно не переписуєте контролер, але додаєте його до списку обробників для переднього імені
— 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.