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