Jak zaktualizować routery administracyjne niestandardowego modułu dla poprawki SUPEE-6788

34

Nie jestem pewien, jak zaktualizować niestandardowe moduły do ​​pracy z łatką SUPEE-6788 , instrukcje nie są bardzo jasne.

Opierając się na samouczku Alana Storma , stworzyłem prosty moduł w generatorze www.silksoftware.com/magento-module-creator/ do testowania. Ma niestandardową stronę w adminie, która działa idealnie dobrze, ale kiedy zastosuję poprawki wymagane w SUPEE-6788, strona admin pokazuje błąd 404.

Adres URL niestandardowej strony administratora to:

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

Oto konfiguracja modułu:

<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>
    ...

Oto kontroler:

/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();
    }
}

Rozwiązanie

Wymieniłem <routers>część na podstawie instrukcji z łatki takiej (prawdopodobnie niepoprawnie):

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

Ale teraz URL pokazuje tylko 404 error:

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

Jak poprawnie naprawić moduł dla tej nowej poprawki? Czy muszę tylko zaktualizować, config.xmlczy też muszę zmienić adres URL strony administratora po zastosowaniu tej poprawki?

zitix
źródło

Odpowiedzi:

42

Udało mi się zmienić mój moduł niestandardowy, aby korzystać z nowego sposobu Magento, zgodnie z zaleceniami dla łatki 6788. Podaję tutaj jako odniesienie dla innych, również odpowiadam na pytanie w tym wątku.

  1. Przejdź do routera w pliku config.xml:

Przed:

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

Po

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <adminhello before="Mage_Adminhtml">Pulsestorm_Adminhello_Adminhtml</adminhello>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>
  1. Przejdź do kontrolera

2.1

Przed ścieżką

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

Po ścieżce

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

2.2

Przed zajęciami

class Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController extends Mage_Adminhtml_Controller_Action 
{
..
}

Po zajęciach

class Pulsestorm_Adminhello_Adminhtml_Adminhello_AdminhellobackendController extends Mage_Adminhtml_Controller_Action
{
...
}
  1. Jeśli masz plik adminhtml.xml (podaj jako przykład jak poniżej)

Przed

<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>

Po

<?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. Zmień swoje kody

Przed: uzyskiwanie adresów URL

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

Po: uzyskiwanie adresów URL

Mage::getUrl('adminhtml/adminhello_adminhellobackend/doSomething')
  1. Zmiana plików układu (jeśli masz pliki układu, na przykład jak poniżej)

Przed układem

<adminhello_adminhtml_adminhellobackend_index>
...
</adminhello_adminhtml_adminhellobackend_index>

Po ułożeniu

<adminhtml_adminhello_adminhellobackend_index>
...
</adminhtml_adminhello_adminhellobackend_index>
NgocDB
źródło
Doskonały! Działa jak urok!
BENN1TH
17

Straciłem godziny, zastanawiając się nad tym. Tylko dlatego, że Devs w Magento nie są w stanie dokonać zrozumiałej konfiguracji, a nawet udokumentować swojego kodu w sposób, w jaki człowiek byłby w stanie go odczytać.

Najpierw spójrzmy na config.xml

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

Zmieniło się całe znaczenie tagów. Tag pod „modułami” to tylko losowa nazwa. musisz tylko upewnić się, że jest unikalny, aby nie został nadpisany podczas kompilacji XML. Ma wpływ na adres URL.

<admin_adminhello after= ..... >

Magento oczekuje teraz, że przeniesiesz klasy kontrolera zaplecza do nowego podfolderu o nazwie „adminhtml”. Dlatego w config.xml musisz zmienić sufiks nazwy klasy, dodając _Adminhtml .

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

W twoim przypadku folder byłby zlokalizowany pod adresem

app / code / local / Pulsestorm / Adminhello / controllers / Adminhtml

Teraz prawdziwy problem. Korzystając z innego (lepszego) systemu, zdefiniowano własną przestrzeń nazw za pomocą znacznika „FrontName”. Nie masz już tego luksusu, więc musisz upewnić się, że kontroler ma unikalną nazwę. W przeciwnym razie byłoby w konflikcie z innymi rozszerzeniami. Dlatego kontrolery o nazwie „AdminController.php” nie są już dobre, musisz uczynić to specyficznym dla projektu, tak jak w twoim przypadku „ AdminhelloController.php

Twój adres URL zmieni się wtedy na

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

Nie zapomnij dostosować nazwy klasy kontrolera po zmianie nazwy lub przeniesieniu pliku

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

W takim przypadku nazwa brzmiałaby Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController

Oczywiście musisz także dostosować adresy URL używane w elementach menu i formularzach używanych w backendu

Upewnij się również, czy włączyłeś tryb programisty w pliku index.php . Zauważyłem, że jeśli w kontrolerze jest jakiś błąd, dostajesz również 404. W trybie Develeport pojawia się błąd Stacktrace.

Chciałbym również napisać dziennik po wywołaniu kontrolera, aby zobaczyć, czy w ogóle uzyskano dostęp do metody kontrolera.

/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
źródło
czy możesz rozszerzyć swoją odpowiedź, jeśli to działa? dzięki!
Claudiu Creanga
Ok, gotowe ... mam nadzieję, że to pomoże
leedch
Heh, kiedyś usłyszałem zabawną odpowiedź programisty Magento w ciągu dnia na starych forach MagentoCommerce na Twój komentarz „ jeszcze dokumentujący ich kod ”. „Ale kod sam się dokumentuje ...”. Umm nie zdał wtedy testu perla, nie teraz. Dzięki za powyższe wyjaśnienie, potrzebowałem tego.
Fiasco Labs,
3
Magento oczekuje teraz, że przeniesiesz klasy kontrolera zaplecza do nowego podfolderu o nazwie „adminhtml” - to nieprawda, kontroler może być gdziekolwiek chcesz, w tym przypadku jest tylko w folderze adminhtml, ponieważ zdefiniowałeś trasę początkową z Pulsestorm_Adminhello_Adminhtmlw config.xml. Musisz także zaktualizować dowolne uchwyty układu administratora i wywoływać generowanie adresów URL administratora getUrl().
Jonathan Hussey,
@ leedch Wyciągam włosy, próbując dowiedzieć się, dlaczego ten moduł nie działa, gdy zmienię routing administratora dla SUPEE-6788 bez względu na to, co próbuję, pojawia się błąd 404. Jest to prosty moduł do drukowania niestandardowej faktury HTML. github.com/gaiterjones/magento-htmlinvoice
paj
8

Oto narzędzie do analizy / naprawy konfliktów rozszerzeń i dostosowań wynikających z poprawki Magento SUPEE-6788.

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

Uwaga: przed zastosowaniem jakiejkolwiek poprawki lub poprawki poprawki zawsze zaleca się wykonanie kopii zapasowej witryny i bazy danych.

Możesz analizować tylko to, co trzeba naprawić.

Aby przeanalizować: Uruchom z SSH:php -f fixSUPEE6788.php -- analyze

To pokaże, które pliki mają problemy i jak je naprawić. Nie spowoduje to zastosowania poprawki.

LUB możesz także zastosować zmiany / poprawki.

Aby zastosować zmiany: Uruchom z SSH:php -f fixSUPEE6788.php -- fix

Spowoduje to automatyczne przeanalizowanie i zastosowanie poprawki.

Mukesh Chapagain
źródło
Dobry udział +1 dla u
Amit Bera
Czy to, ale nadal strony administracyjne dla wszystkich takich modułów wyświetlają stronę 404
Wasiq Shahrukh