Как обновить админ-роутеры пользовательского модуля для патча SUPEE-6788

34

Я не уверен, как обновить пользовательские модули для работы с патчем SUPEE-6788 , инструкции не очень понятны.

На основе учебного пособия Алана Шторма я создал простой модуль в генераторе www.silksoftware.com/magento-module-creator/ для тестирования. У него есть пользовательская страница в админке, которая прекрасно работает, но когда я применяю исправления, требуемые в SUPEE-6788, на странице администратора отображается ошибка 404.

URL пользовательской страницы администратора:

localhost / index.php / admin / admin_adminhello / adminhtml_adminhellobackend / index / key / 83f08ec4bddff37e47412e16acc8d3f6 /

Вот конфиг модуля:

<config>
    <modules>
        <Pulsestorm_Adminhello>
            <version>0.1.0</version>
        </Pulsestorm_Adminhello>
    </modules>
    <global>
        <helpers>
            <adminhello>
                <class>Pulsestorm_Adminhello_Helper</class>
            </adminhello>
        </helpers>
        <blocks>
            <adminhello>
                <class>Pulsestorm_Adminhello_Block</class>
            </adminhello>
        </blocks>
    </global>
    <admin>
        <routers>
            <adminhello>
                <use>admin</use>
                <args>
                    <module>Pulsestorm_Adminhello</module>
                    <frontName>admin_adminhello</frontName>
                </args>
            </adminhello>
        </routers>
    </admin>
    ...

Вот контроллер:

/app/code/local/Pulsestorm/Adminhello/controllers/Adminhtml/AdminhellobackendController.php

class Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController extends Mage_Adminhtml_Controller_Action
{
    public function indexAction()
    {
        $this->loadLayout();
        $this->_title($this->__("My Test Page Title"));
        $this->renderLayout();
    }
}

Решение

Я заменил <routers>часть на основе инструкций из патча, как это (вероятно, неправильно):

<routers>
    <adminhtml>
        <args>
            <modules>
                <admin_adminhello after="Mage_Adminhtml">Pulsestorm_Adminhello_Adminhtml</admin_adminhello>
            </modules>
        </args>
    </adminhtml>
</routers>

Но теперь URL просто показывает 404 error:

локальный / index.php / администратор / admin_adminhello / adminhtml_adminhellobackend / индекс / ключ / 83f08ec4bddff37e47412e16acc8d3f6 /

Как правильно исправить модуль для этого нового патча? Нужно ли мне просто обновлять config.xmlили мне нужно изменить URL страницы администратора после применения этого патча?

zitix
источник

Ответы:

42

Мне удалось изменить свой пользовательский модуль, чтобы он использовал Magento по-новому, как рекомендовано с патчем 6788. Поэтому я даю здесь ссылку для других, также отвечу на вопрос в этой теме.

  1. Перейдите к маршрутизатору в файле config.xml:

До:

<admin>
    <routers>
        <adminhello>
            <use>admin</use>
            <args>
                <module>Pulsestorm_Adminhello</module>
                <frontName>admin_adminhello</frontName>
            </args>
        </adminhello>
    </routers>
</admin>

После

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <adminhello before="Mage_Adminhtml">Pulsestorm_Adminhello_Adminhtml</adminhello>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>
  1. Изменить на контроллер

2.1.

Перед Путь

/app/code/local/Pulsestorm/Adminhello/controllers/Adminhtml/AdminhellobackendController.php

После пути

/app/code/local/Pulsestorm/Adminhello/controllers/Adminhtml/Adminhello/AdminhellobackendController.php

2,2

Перед уроком

class Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController extends Mage_Adminhtml_Controller_Action 
{
..
}

После школы

class Pulsestorm_Adminhello_Adminhtml_Adminhello_AdminhellobackendController extends Mage_Adminhtml_Controller_Action
{
...
}
  1. Если у вас есть файл adminhtml.xml (просто приведите в качестве примера ниже)

До

<config>
    <menu>
        <adminhello_config translate="title" module="adminhello">
            <title>Adminhello Settings</title>
            <sort_order>100</sort_order>
            <children>
                <list_action translate="title" module="adminhello">
                    <title>Manage Hellos</title>
                    <sort_order>4</sort_order>
                <action>adminhello/adminhtml_adminhellobackend</action>
                </list_action>
...
            </children>
        </adminhello_config>
    </menu>
</config>

После

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <menu>
        <adminhello_config translate="title" module="adminhello">
            <title>Adminhello Settings</title>
            <sort_order>100</sort_order>
            <children>
                <list_action translate="title" module="adminhello">
                    <title>Manage Hellos</title>
                    <sort_order>4</sort_order>
                <action>adminhtml/adminhello_adminhellobackend</action>
                </list_action>
...
            </children>
        </adminhello_config>
    </menu>
</config>
  1. Изменить в ваших кодах

До: получение URL

Mage::getUrl('adminhello/adminhtml_adminhellobackend/doSomething')

После: получение URL

Mage::getUrl('adminhtml/adminhello_adminhellobackend/doSomething')
  1. Изменение в файлах макетов (если у вас есть файлы макетов, например, как показано ниже)

Перед макетом

<adminhello_adminhtml_adminhellobackend_index>
...
</adminhello_adminhtml_adminhellobackend_index>

После макета

<adminhtml_adminhello_adminhellobackend_index>
...
</adminhtml_adminhello_adminhellobackend_index>
NgocDB
источник
Превосходно! Работал как шарм!
BENN1TH
17

Я потерял часы, чтобы понять это. Просто потому, что разработчики в Magento не способны сделать понятную конфигурацию или даже документировать свой код так, чтобы человек мог его прочитать.

Давайте посмотрим на config.xml первый

<routers>
<adminhtml>
    <args>
        <modules>
            <admin_adminhello after="Mage_Adminhtml">Pulsestorm_Adminhello_Adminhtml</admin_adminhello>
        </modules>
    </args>
</adminhtml>

Весь смысл тегов изменился. Тег под «модулями» - это просто случайное имя. вам просто нужно убедиться, что он уникален, чтобы не перезаписывать его при компиляции XML. Это влияет на URL.

<admin_adminhello after= ..... >

Теперь Magento ожидает, что вы переместите классы внутреннего контроллера в новую подпапку с именем «adminhtml». Вот почему в config.xml вы должны изменить суффикс имени класса, добавив _Adminhtml .

... >Pulsestorm_Adminhello_Adminhtml</admin_adminhello> ....

В вашем случае папка будет расположена на

Приложение / код / ​​местные / Pulsestorm / Adminhello / контроллеры / Adminhtml

Теперь настоящая проблема. При использовании другой (лучшей) системы у вас было собственное пространство имен, определенное с помощью тега «FrontName». У вас больше нет этой роскоши, поэтому вам нужно убедиться, что ваш контроллер имеет уникальное имя. В противном случае это будет противоречить другим расширениям. Так что контроллеры с именем что-то вроде «AdminController.php» больше не годятся , вы должны сделать это чем-то конкретным для проекта, как в вашем случае « AdminhelloController.php »

Ваш URL будет затем изменен на

Http: //localhost/index.php/admin/adminhellobackend/index/key/83f08ec4bddff37e47412e16acc8d3f6/

Не забудьте настроить имя класса контроллера после переименования или перемещения файла

/app/code/local/Pulsestorm/Adminhello/controllers/Adminhtml/AdminhellobackendController.php

В этом случае имя будет Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController

Конечно, вы также должны настроить любые URL-адреса, используемые в пунктах меню и формах, которые вы используете в бэкэнде

Также убедитесь, что вы включили режим разработчика в файле index.php . Я заметил, что если в контроллере есть какая-то ошибка, вы также получаете 404. В режиме Develeport вы получаете ошибку Stacktrace.

То, что я также сделал бы, это просто записать журнал после вызова контроллера, чтобы вы увидели, был ли вообще доступен метод контроллера.

/app/code/local/Pulsestorm/Adminhello/controllers/Adminhtml/AdminhellobackendController.php

class Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController extends Mage_Adminhtml_Controller_Action
{
    public function indexAction()
    {
        Mage::log('Controller was accessed', null, 'controller.log', true);
        $this->loadLayout();
        $this->_title($this->__("My Test Page Title"));
        $this->renderLayout();
    }
}
leedch
источник
Вы можете расширить свой ответ, если он работает? Благодарность!
Клаудиу Крянгэ
Хорошо, готово ... надеюсь, это поможет
Leedch
Хех, однажды поймал веселый ответ разработчика Magento в тот день на старых форумах MagentoCommerce на ваш комментарий, « даже документирующий их код ». «Но код самодокументируется ...». Умм не прошел тест на Perl Pod, не сейчас. Спасибо за объяснение выше, мне это было нужно.
Fiasco Labs
3
Теперь Magento ожидает, что вы переместите классы своего внутреннего контроллера в новую подпапку с именем «adminhtml» - это не так, контроллер может быть где угодно, в этом случае он находится только в папке adminhtml, потому что вы определили начальный маршрут из Pulsestorm_Adminhello_Adminhtmlв config.xml. Вам также необходимо обновить любые дескрипторы макета администратора, и вызовы генерируют URL-адреса администратора getUrl().
Джонатан Хасси
@leedch Я пытаюсь понять, почему этот модуль не работает, когда я изменяю административную маршрутизацию для SUPEE-6788, независимо от того, что я пытаюсь, я получаю ошибку 404. Это простой модуль для печати настраиваемого HTML-счета. github.com/gaiterjones/magento-htmlinvoice
пай
8

Вот инструмент анализа / исправления для конфликтов расширения и настройки, возникающих из-за патча Magento SUPEE-6788.

https://github.com/rhoerr/supee-6788-toolbox

Примечание. Перед применением какого-либо исправления или исправления всегда рекомендуется сделать резервную копию вашего веб-сайта и базы данных.

Вы можете только проанализировать, что нужно исправить.

Для анализа: Запустите из SSH:php -f fixSUPEE6788.php -- analyze

Это покажет, какие файлы имеют проблемы и как вы можете их исправить. Это не относится к исправлению.

ИЛИ, вы также можете применить изменения / исправления.

Чтобы применить изменения: Запустите из SSH:php -f fixSUPEE6788.php -- fix

Это проанализирует и применит исправление автоматически.

Мукеш Чапагейн
источник
Хорошая доля +1 для тебя
Амит Бера
Сделал это, но все еще страницы администратора для всех таких модулей показывают страницу 404
Васик Шахрух