Come aggiornare i router di amministrazione del modulo personalizzato per la patch SUPEE-6788


34

Non sono sicuro di come aggiornare i moduli personalizzati per funzionare con la patch SUPEE-6788 , le istruzioni non sono molto chiare.

Sulla base del tutorial di Alan Storm , ho creato un semplice modulo nel generatore www.silksoftware.com/magento-module-creator/ per i test. Ha una pagina personalizzata in admin che funziona perfettamente, ma quando applico le correzioni richieste in SUPEE-6788, la pagina di amministrazione mostra un errore 404.

L'URL della pagina di amministrazione personalizzata è:

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

Ecco la configurazione del modulo:

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

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

Soluzione

Ho sostituito la <routers>parte in base alle istruzioni della patch in questo modo (probabilmente in modo errato):

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

Ma ora l'URL mostra solo 404 error:

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

Come riparare correttamente il modulo per quella nuova patch? Devo solo aggiornare config.xmlo devo anche cambiare l'URL della pagina di amministrazione dopo aver applicato questa patch?

Risposte:


42

Sono riuscito a cambiare il mio modulo personalizzato per utilizzare il nuovo modo di Magento come raccomandato con la patch 6788. Quindi do qui come riferimento per altri, rispondo anche alla domanda in questo thread.

  1. Passare al router nel file config.xml:

Prima:

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

Dopo

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <adminhello before="Mage_Adminhtml">Pulsestorm_Adminhello_Adminhtml</adminhello>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>
  1. Passare al controller

2.1.

Prima del percorso

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

Dopo il percorso

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

2.2

Prima della lezione

class Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController extends Mage_Adminhtml_Controller_Action 
{
..
}

Dopo la lezione

class Pulsestorm_Adminhello_Adminhtml_Adminhello_AdminhellobackendController extends Mage_Adminhtml_Controller_Action
{
...
}
  1. Se hai un file adminhtml.xml (basta dare un esempio come di seguito)

Prima

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

Dopo

<?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. Cambia nei tuoi codici

Prima: ottenere gli URL

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

Dopo: ottenere gli URL

Mage::getUrl('adminhtml/adminhello_adminhellobackend/doSomething')
  1. Modifica dei file di layout (se si dispone di file di layout, ad esempio come di seguito)

Prima del layout

<adminhello_adminhtml_adminhellobackend_index>
...
</adminhello_adminhtml_adminhellobackend_index>

Dopo il layout

<adminhtml_adminhello_adminhellobackend_index>
...
</adminhtml_adminhello_adminhellobackend_index>

Eccellente! Ha funzionato come un fascino!
°

17

Ho perso ore a capirlo. Solo perché gli sviluppatori di Magento non sono in grado di fare una configurazione comprensibile, o ancora di documentare il loro codice in un modo in cui un essere umano sarebbe in grado di leggerlo.

Diamo uno sguardo alla config.xml prima

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

L'intero significato dei tag è cambiato. Il tag sotto "moduli" è solo un nome casuale. devi solo assicurarti che sia univoco per assicurarti che non venga sovrascritto quando viene compilato l'XML. Ha influenza sull'URL.

<admin_adminhello after= ..... >

Magento si aspetta ora di spostare le classi del controller di back-end in una nuova sottocartella denominata "adminhtml". Ecco perché in config.xml devi modificare il suffisso del nome della classe aggiungendo _Adminhtml .

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

Nel tuo caso la cartella si troverà in

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

Ora il vero problema. Utilizzando l'altro sistema (migliore) è stato definito il proprio spazio dei nomi utilizzando il tag "FrontName". Non hai più questo lusso, quindi devi assicurarti che il tuo controller abbia un nome univoco. Altrimenti sarebbe in conflitto con altre estensioni. Quindi i controller chiamati come "AdminController.php" non vanno più bene, devi renderlo qualcosa di specifico per il progetto, come nel tuo caso " AdminhelloController.php "

L'URL verrà quindi castigato

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

Non dimenticare di modificare il nome della classe del controller dopo aver rinominato o spostato il file

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

In questo caso il nome sarebbe Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController

Ovviamente devi anche modificare gli URL utilizzati nelle voci di menu e nei moduli che usi nel back-end

Assicurati anche di attivare la modalità sviluppatore nel file index.php . Ho notato che se il controller ha qualche bug, si ottiene anche un 404. Con la modalità Sviluppo si ottiene un errore Stacktrace.

Quello che vorrei anche fare è scrivere un registro una volta chiamato il controller, solo per vedere se è stato effettuato l'accesso al metodo del controller.

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

puoi espandere la tua risposta se funziona? Grazie!
Claudiu Creanga,

Ok, fatto ... spero che sia d'aiuto
Leedch

Heh, una volta ho ricevuto una risposta esilarante da sviluppatore Magento nel corso dei vecchi forum di MagentoCommerce al tuo commento " ancora documentando il loro codice ". "Ma il codice è auto-documentante ...". Umm non ha superato il test perl pod allora, non ora. Grazie per la spiegazione sopra, ne avevo bisogno.
Fiasco Labs

3
Magento si aspetta ora di spostare le classi del controller back-end in una nuova sottocartella denominata "adminhtml" - questo non è vero, il controller può essere ovunque tu lo desideri, è solo nella cartella adminhtml in questo caso perché hai definito una rotta iniziale di Pulsestorm_Adminhello_Adminhtmlin config.xml. È inoltre necessario aggiornare tutti gli handle di layout dell'amministratore e le chiamate per generare gli URL dell'amministratore come getUrl().
Jonathan Hussey,

@leedch Mi sto strappando i capelli cercando di capire perché questo modulo non funzionerà quando cambio il percorso di amministrazione per SUPEE-6788 indipendentemente da ciò che provo, ottengo un errore 404. È un semplice modulo per stampare una fattura html personalizzata. github.com/gaiterjones/magento-htmlinvoice
paj

8

Ecco uno strumento di analisi / correzione per i conflitti di estensione e personalizzazione derivanti dalla patch MagEE SUPEE-6788.

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

Nota: prima di applicare qualsiasi patch o correzione di patch, si consiglia sempre di eseguire il backup del sito Web e del database.

Puoi solo analizzare ciò che è necessario correggere.

Per analizzare: Esegui da SSH:php -f fixSUPEE6788.php -- analyze

Questo mostrerà quali file hanno problemi e come risolverli. Questo non applicherà la correzione.

OPPURE, è possibile applicare anche le modifiche / correzioni.

Per applicare le modifiche: Esegui da SSH:php -f fixSUPEE6788.php -- fix

Ciò analizzerà e applicherà automaticamente la correzione.


Buona condivisione +1 per te
Amit Bera

Fatto questo, ma ancora le pagine di amministrazione di tutti questi moduli mostrano la pagina 404
Wasiq Shahrukh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.