Comment mettre à jour les routeurs admin du module personnalisé pour le correctif SUPEE-6788

34

Je ne suis pas sûr de savoir comment mettre à jour des modules personnalisés pour fonctionner avec le correctif SUPEE-6788 , les instructions ne sont pas très claires.

Sur la base du tutoriel d' Alan Storm , j'ai créé un module simple dans le générateur www.silksoftware.com/magento-module-creator/ à des fins de test. Il a une page personnalisée dans admin qui fonctionne parfaitement, mais lorsque j'applique les correctifs requis dans SUPEE-6788, la page admin affiche une erreur 404.

L'URL de la page d'administration personnalisée est la suivante:

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

Voici la configuration du module:

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

Voici le contrôleur:

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

Solution

J'ai remplacé la <routers>partie en fonction des instructions du correctif comme ceci (probablement incorrectement):

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

Mais maintenant, l'URL montre simplement 404 error:

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

Comment réparer le module correctement pour ce nouveau patch? Dois-je simplement mettre à jour config.xmlou dois-je également changer l'URL de la page d'administration après avoir appliqué ce correctif?

Zitix
la source

Réponses:

42

J'ai réussi à changer mon module personnalisé pour utiliser la nouvelle méthode Magento, comme recommandé avec le patch 6788. Donc, je donne ici comme référence pour les autres, répondez également à la question de ce fil.

  1. Changez en routeur dans le fichier config.xml:

Avant:

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

Après

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <adminhello before="Mage_Adminhtml">Pulsestorm_Adminhello_Adminhtml</adminhello>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>
  1. Passer au contrôleur

2.1.

Avant chemin

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

Après le chemin

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

2.2

Avant les cours

class Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController extends Mage_Adminhtml_Controller_Action 
{
..
}

Après les cours

class Pulsestorm_Adminhello_Adminhtml_Adminhello_AdminhellobackendController extends Mage_Adminhtml_Controller_Action
{
...
}
  1. Si vous avez un fichier adminhtml.xml (donnez juste un exemple comme ci-dessous)

Avant

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

Après

<?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. Changez vos codes

Avant: obtenir des URL

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

Après: obtenir les URL

Mage::getUrl('adminhtml/adminhello_adminhellobackend/doSomething')
  1. Modifier les fichiers de mise en page (si vous avez des fichiers de mise en forme, par exemple comme ci-dessous)

Avant la mise en page

<adminhello_adminhtml_adminhellobackend_index>
...
</adminhello_adminhtml_adminhellobackend_index>

Après la mise en page

<adminhtml_adminhello_adminhellobackend_index>
...
</adminhtml_adminhello_adminhellobackend_index>
NgocDB
la source
Excellent! Travaillé comme un charme!
BENN1TH
17

J'ai perdu des heures à comprendre cela. Tout simplement parce que les développeurs de Magento ne sont pas capables de créer une configuration compréhensible, ou même de documenter leur code de manière à ce qu'un être humain puisse le lire.

Regardons d' abord le fichier config.xml

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

La signification entière des balises a changé. La balise sous "modules" est juste un nom aléatoire. vous devez simplement vous assurer qu'il est unique pour qu'il ne soit pas écrasé lors de la compilation du XML. Cela a une influence sur l'URL.

<admin_adminhello after= ..... >

Magento s'attend maintenant à ce que vous déplaciez les classes de votre contrôleur principal dans un nouveau sous-dossier appelé "adminhtml". C'est pourquoi, dans le fichier config.xml, vous devez modifier le suffixe du nom de la classe en ajoutant _Adminhtml .

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

Dans votre cas, le dossier serait situé à

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

Maintenant le vrai problème. En utilisant l’autre (meilleur) système, vous avez défini votre propre espace de noms à l’aide de la balise "FrontName". Vous n'avez plus ce luxe, vous devez donc vous assurer que votre contrôleur a un nom unique. Sinon, cela entrerait en conflit avec d'autres extensions. Les contrôleurs nommés quelque chose comme "AdminController.php" ne sont plus bons, vous devez en faire quelque chose de spécifique au projet, comme dans votre cas " AdminhelloController.php "

Votre URL sera alors chagne à

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

N'oubliez pas de régler le nom de classe du contrôleur après avoir renommé ou déplacé le fichier.

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

Dans ce cas, le nom serait Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController.

Bien sûr, vous devez également ajuster les URL utilisées dans les éléments de menu et les formulaires que vous utilisez dans le backend.

Assurez-vous également d'activer le mode développeur dans le fichier index.php . J'ai remarqué que si le contrôleur a un bogue, vous obtenez également un 404. Avec le mode Develeport, vous obtenez une erreur Stacktrace.

Ce que je voudrais aussi faire, c'est juste écrire un journal une fois que le contrôleur est appelé, afin que vous puissiez voir si la méthode du contrôleur a été utilisée.

/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
la source
pouvez-vous développer votre réponse si cela fonctionne? Merci!
Claudiu Creanga
Ok, c'est fait ... espérons que cela vous aidera
leedch
Heh, une fois que les développeurs de MagentoCommerce ont réagi de manière hilarante, les développeurs de Magento ont réagi à votre commentaire de type " documentant encore leur code ". "Mais le code est auto-documentant ...". Umm n'avait pas passé le test de Perl Pod à ce moment-là, pas maintenant. Merci pour l'explication ci-dessus, j'en avais besoin.
Fiasco Labs
3
Magento s'attend maintenant à ce que vous déplaciez vos classes de contrôleur d'arrière-plan dans un nouveau sous-dossier appelé "adminhtml" - ce n'est pas vrai, le contrôleur peut être où vous le souhaitez, il ne s'agit que du dossier adminhtml car vous avez défini un itinéraire de départ. de Pulsestorm_Adminhello_Adminhtmldans config.xml. Vous devez également mettre à jour tous les descripteurs de présentation d'administrateur et les appels permettant de générer des adresses URL d'administration similaires getUrl().
Jonathan Hussey
@leedch Je tire les cheveux en essayant de comprendre pourquoi ce module ne fonctionnera pas lorsque je changerai le routage admin pour SUPEE-6788, peu importe ce que j'essayerai, j'obtiendrai une erreur 404. C'est un module simple pour imprimer une facture HTML personnalisée. github.com/gaiterjones/magento-htmlinvoice
paj
8

Voici un outil d'analyse / de correction des conflits d'extension et de personnalisation résultant du correctif Magento SUPEE-6788.

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

Remarque: avant d'appliquer un correctif ou un correctif, il est toujours recommandé de sauvegarder votre site Web et votre base de données.

Vous pouvez uniquement analyser ce qui doit être corrigé.

Pour analyser: Exécuter à partir de SSH:php -f fixSUPEE6788.php -- analyze

Cela montrera quels fichiers ont des problèmes et comment vous pouvez les résoudre. Cela n'appliquera pas le correctif.

OU vous pouvez également appliquer les modifications / corrections.

Pour appliquer les modifications: Exécutez à partir de SSH:php -f fixSUPEE6788.php -- fix

Cela analysera et appliquera le correctif automatiquement.

Mukesh Chapagain
la source
Bon partage +1 pour vous
Amit Bera
A fait cela, mais toujours les pages d'administration pour tous ces modules sont
affichées