Як оновити адміністратори маршрутизатори користувацького модуля для патча 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:

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

Як правильно виправити модуль для цього нового патча? Мені просто потрібно оновити config.xmlчи мені також потрібно змінити URL-адресу сторінки адміністратора після застосування цього виправлення?

Відповіді:


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>

Відмінно! Працював як шарм!
— BENN1TH

17

Я втратив години, з'ясовуючи це. Просто тому, що Devs в 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> ....

У вашому випадку папка буде розташована на

app / code / local / 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

Хе, колись на старих форумах MagentoCommerce на днях на старі форуми MagentoCommerce надійшов веселий відгук розробника Magento на ваш коментар " ще навіть документуючи свій код ". "Але код самодокументує ...". Умм не пройшов тест на перл стручок тоді, ні зараз. Дякую за пояснення вище, мені це було потрібно.
— Лабораторії Фіаско

3
Зараз Magento очікує, що ви перенесите свої класи контрольних серверів у нову підпапку під назвою "adminhtml" - це неправда, контролер може знаходитись де завгодно, в цьому випадку це лише під папкою adminhtml, оскільки ви визначили початковий маршрут з Pulsestorm_Adminhello_Adminhtmlв config.xml. Вам також потрібно оновити будь-які ручки макета адміністратора та дзвінки для створення подібних URL-адрес адміністратора getUrl().
— Джонатан Хуссі

@leedch Я витягую волосся, намагаючись зрозуміти, чому цей модуль не працюватиме, коли я змінюю маршрутизацію адміністратора на SUPEE-6788 незалежно від того, що я намагаюся, я отримую помилку 404. Це простий модуль для друку користувальницького рахунку html. github.com/gaiterjones/magento-htmlinvoice
— PAJ

8

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

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

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

Ви можете лише проаналізувати, що потрібно виправити.

Для аналізу: запустіть з SSH:php -f fixSUPEE6788.php -- analyze

Це покаже, які файли мають проблеми та як їх виправити. Це виправлення не застосовується.

АБО ви також можете застосувати зміни / виправлення.

Щоб застосувати зміни: Запустіть з SSH:php -f fixSUPEE6788.php -- fix

Це дозволить проаналізувати та застосувати виправлення автоматично.


Добре Поділитися +1 для u
— Amit Bera

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