Перепишіть контролер 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.