So aktualisieren Sie Admin-Router des benutzerdefinierten Moduls für den Patch SUPEE-6788

34

Ich bin nicht sicher, wie ich benutzerdefinierte Module aktualisieren soll, damit sie mit dem SUPEE-6788- Patch funktionieren . Die Anweisungen sind nicht sehr klar.

Basierend auf dem Tutorial von Alan Storm habe ich im Generator www.silksoftware.com/magento-module-creator/ ein einfaches Modul zum Testen erstellt. Es gibt eine benutzerdefinierte Seite in admin, die einwandfrei funktioniert. Wenn ich jedoch die in SUPEE-6788 erforderlichen Korrekturen vornehme, wird auf der Administrationsseite der Fehler 404 angezeigt.

Die URL der benutzerdefinierten Administrationsseite lautet:

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

Hier ist die Konfiguration des Moduls:

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

Hier ist der Controller:

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

Lösung

Ich habe das <routers>Teil basierend auf Anweisungen aus dem Patch wie folgt ersetzt (wahrscheinlich falsch):

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

Aber jetzt zeigt die URL nur 404 error:

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

Wie kann ich das Modul für diesen neuen Patch richtig reparieren? Muss ich nur aktualisieren config.xmloder muss ich auch die URL der Admin-Seite ändern, nachdem ich diesen Patch angewendet habe?

zitix
quelle

Antworten:

42

Ich habe es geschafft, mein benutzerdefiniertes Modul so zu ändern, dass es die mit dem Patch 6788 empfohlene neue Magento-Methode verwendet. Daher gebe ich hier als Referenz für andere, auch die Frage in diesem Thread zu beantworten.

  1. Wechseln Sie in der Datei config.xml zum Router:

Vor:

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

Nach

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <adminhello before="Mage_Adminhtml">Pulsestorm_Adminhello_Adminhtml</adminhello>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>
  1. Wechseln Sie zum Controller

2.1.

Vor dem Pfad

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

Nach dem Weg

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

2.2

Vor dem Unterricht

class Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController extends Mage_Adminhtml_Controller_Action 
{
..
}

Nach dem Unterricht

class Pulsestorm_Adminhello_Adminhtml_Adminhello_AdminhellobackendController extends Mage_Adminhtml_Controller_Action
{
...
}
  1. Wenn Sie eine adminhtml.xml-Datei haben (geben Sie als Beispiel unten an)

Vor

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

Nach

<?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. Ändern Sie Ihre Codes

Vorher: URLs abrufen

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

Nachher: ​​URLs abrufen

Mage::getUrl('adminhtml/adminhello_adminhellobackend/doSomething')
  1. Änderung in Layoutdateien (wenn Sie über Layoutdateien verfügen, z. B. wie folgt)

Vor dem Layout

<adminhello_adminhtml_adminhellobackend_index>
...
</adminhello_adminhtml_adminhellobackend_index>

Nach dem Layout

<adminhtml_adminhello_adminhellobackend_index>
...
</adminhtml_adminhello_adminhellobackend_index>
NgocDB
quelle
Ausgezeichnet! Lief wie am Schnürchen!
BENN1TH
17

Ich habe Stunden verloren, um das herauszufinden. Nur weil die Entwickler bei Magento nicht in der Lage sind, eine verständliche Konfiguration zu erstellen oder ihren Code so zu dokumentieren, dass ein Mensch ihn lesen kann.

Schauen wir uns zuerst die config.xml an

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

Die gesamte Bedeutung der Tags hat sich geändert. Das Tag unter "modules" ist nur ein zufälliger Name. Sie müssen nur sicherstellen, dass es eindeutig ist, um sicherzustellen, dass es beim Kompilieren des XML nicht überschrieben wird. Es hat Einfluss auf die URL.

<admin_adminhello after= ..... >

Magento erwartet nun, dass Sie Ihre Backend-Controller-Klassen in einen neuen Unterordner namens "adminhtml" verschieben. Aus diesem Grund müssen Sie in der config.xml das Suffix des Klassennamens ändern, indem Sie _Adminhtml hinzufügen .

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

In Ihrem Fall befindet sich der Ordner unter

app / code / local / Pulsestorm / Adminhello / controller / Adminhtml

Nun das eigentliche Problem. Bei Verwendung des anderen (besseren) Systems wurde Ihr eigener Namespace mithilfe des Tags "FrontName" definiert. Sie haben diesen Luxus nicht mehr und müssen sicherstellen, dass Ihr Controller einen eindeutigen Namen hat. Andernfalls würde es zu Konflikten mit anderen Erweiterungen kommen. Damit Controller mit dem Namen "AdminController.php" nicht mehr funktionieren, müssen Sie sie projektspezifisch anpassen , wie in Ihrem Fall " AdminhelloController.php ".

Ihre URL wechselt dann zu

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

Vergessen Sie nicht, den Controller-Klassennamen nach dem Umbenennen oder Verschieben der Datei anzupassen

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

In diesem Fall wäre der Name Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController

Natürlich müssen Sie auch alle URLs anpassen, die in Menüelementen und Formularen verwendet werden , die Sie im Backend verwenden

Stellen Sie außerdem sicher, dass Sie den Entwicklermodus in der Datei index.php aktivieren . Ich habe festgestellt, dass, wenn der Controller einen Fehler enthält, auch ein 404 angezeigt wird. Im Develeport-Modus wird ein Stacktrace-Fehler angezeigt.

Ich würde auch einfach ein Protokoll schreiben, sobald der Controller aufgerufen wird, damit Sie sehen, ob überhaupt auf die Controller-Methode zugegriffen wurde.

/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
quelle
Können Sie Ihre Antwort erweitern, wenn es funktioniert? Vielen Dank!
Claudiu Creanga
Ok, fertig ... hoffe, es hilft
leedch
Heh, ich habe früher in den alten MagentoCommerce-Foren eine urkomische Antwort von Magento-Entwicklern auf Ihren Kommentar " dokumentiert sogar ihren Code " erhalten. "Aber der Code ist selbstdokumentierend ...". Umm hat den Perl-Pod-Test damals nicht bestanden, heute nicht. Vielen Dank für die Erklärung oben, ich brauchte es.
Fiasco Labs
3
Magento erwartet nun, dass Sie Ihre Backend-Controller-Klassen in einen neuen Unterordner mit dem Namen "adminhtml" verschieben. Dies ist nicht der Fall. Der Controller kann sich dort befinden, wo Sie möchten. In diesem Fall befindet er sich nur im Ordner "adminhtml", da Sie eine Startroute definiert haben von Pulsestorm_Adminhello_Adminhtmlin config.xml. Sie müssen auch alle Handles für das Admin-Layout aktualisieren und Aufrufe, um Admin-URLs zu generieren, wie z getUrl().
Jonathan Hussey
@leedch Ich ziehe mir die Haare aus und versuche herauszufinden, warum dieses Modul nicht funktioniert, wenn ich das Admin-Routing für SUPEE-6788 ändere, egal was ich versuche. Ich erhalte eine 404-Fehlermeldung. Es ist ein einfaches Modul, um eine benutzerdefinierte HTML-Rechnung zu drucken. github.com/gaiterjones/magento-htmlinvoice
paj
8

Hier ist ein Analyse- / Korrektur-Tool für Erweiterungs- und Anpassungskonflikte, die sich aus dem Magento SUPEE-6788-Patch ergeben.

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

Hinweis: Bevor Sie Patches oder Patchfixes anwenden, wird immer empfohlen, eine Sicherungskopie Ihrer Website und Datenbank zu erstellen.

Sie können nur analysieren, was behoben werden muss.

So analysieren Sie: Führen Sie von SSH aus:php -f fixSUPEE6788.php -- analyze

Dies zeigt, welche Dateien Probleme haben und wie Sie diese beheben können. Dies wird das Update nicht anwenden.

ODER Sie können die Änderungen / Korrekturen auch anwenden.

So wenden Sie Änderungen an: Führen Sie SSH aus:php -f fixSUPEE6788.php -- fix

Dadurch wird der Fix automatisch analysiert und angewendet.

Mukesh Chapagain
quelle
Good Share +1 für u
Amit Bera
Haben diese aber noch Admin-Seiten für alle diese Module
angezeigt