Cómo actualizar los enrutadores de administración del módulo personalizado para el parche SUPEE-6788

34

No estoy seguro de cómo actualizar módulos personalizados para que funcionen con el parche SUPEE-6788 , las instrucciones no son muy claras.

Basado en el tutorial de Alan Storm , creé un módulo simple en el generador www.silksoftware.com/magento-module-creator/ para probarlo. Tiene una página personalizada en administración que funciona perfectamente bien, pero cuando aplico las correcciones requeridas en SUPEE-6788, la página de administración muestra un error 404.

La URL de la página de administración personalizada es:

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

Aquí está la configuración del módulo:

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

Aquí está el controlador:

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

Solución

Reemplacé la <routers>parte según las instrucciones del parche como este (probablemente incorrectamente):

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

Pero ahora la URL solo muestra 404 error:

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

¿Cómo arreglar el módulo correctamente para ese nuevo parche? ¿Solo necesito actualizar config.xmlo también tengo que cambiar la URL de la página de administración después de aplicar este parche?

zitix
fuente

Respuestas:

42

Logré cambiar mi módulo personalizado para usar la nueva forma de Magento como se recomienda con el parche 6788. Así que doy aquí como referencia para otro, también respondo la pregunta en este hilo.

  1. Cambie al enrutador en el archivo config.xml:

Antes de:

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

Después

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

2.1.

Antes de camino

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

Después del camino

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

2.2 2.2

Antes de clase

class Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController extends Mage_Adminhtml_Controller_Action 
{
..
}

Después de clases

class Pulsestorm_Adminhello_Adminhtml_Adminhello_AdminhellobackendController extends Mage_Adminhtml_Controller_Action
{
...
}
  1. Si tiene un archivo adminhtml.xml (solo dé como ejemplo a continuación)

antes de

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

Despué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. Cambio en tus códigos

Antes: obtener URL

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

Después: obtener URL

Mage::getUrl('adminhtml/adminhello_adminhellobackend/doSomething')
  1. Cambio en los archivos de diseño (si tiene archivos de diseño, por ejemplo, como se muestra a continuación)

Antes del diseño

<adminhello_adminhtml_adminhellobackend_index>
...
</adminhello_adminhtml_adminhellobackend_index>

Después del diseño

<adminhtml_adminhello_adminhellobackend_index>
...
</adminhtml_adminhello_adminhellobackend_index>
NgocDB
fuente
¡Excelente! ¡Trabajado como un encanto!
BENN1TH
17

Perdí horas descubriendo esto. El hecho de que los desarrolladores de Magento no sean capaces de hacer una configuración comprensible, o incluso de documentar su código de una manera que un ser humano pueda leerlo.

Veamos primero el config.xml

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

Todo el significado de las etiquetas ha cambiado. La etiqueta debajo de "módulos" es solo un nombre aleatorio. solo necesita asegurarse de que sea único para garantizar que no se sobrescriba cuando se compila el XML. Tiene influencia en la URL.

<admin_adminhello after= ..... >

Magento ahora espera que mueva sus clases de controlador de back-end a una nueva subcarpeta llamada "adminhtml". Es por eso que en config.xml debe cambiar el sufijo del nombre de clase agregando _Adminhtml .

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

En su caso, la carpeta se ubicaría en

aplicación / código / local / Pulsestorm / Adminhello / controllers / Adminhtml

Ahora el verdadero problema. Usando el otro (mejor) sistema, tenía su propio espacio de nombres definido usando la etiqueta "FrontName". Ya no tiene este lujo, por lo que debe asegurarse de que su controlador tenga un nombre único. De lo contrario, entraría en conflicto con otras extensiones. Entonces, los controladores nombrados como "AdminController.php" ya no son buenos, debe hacer que sea algo específico del proyecto, como en su caso " AdminhelloController.php "

Su URL luego cambiará a

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

No olvide ajustar el nombre de clase del controlador después de cambiar el nombre o mover el archivo

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

En este caso, el nombre sería Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController

Por supuesto, también debe ajustar las URL utilizadas en los elementos de menú y formularios que utiliza en el backend

También asegúrese de activar el Modo desarrollador en el archivo index.php . Noté que si el controlador tiene algún error, también obtienes un 404. Con el modo Develeport obtienes un error de Stacktrace.

Lo que también haría, es escribir un registro una vez que se llame al controlador, solo para ver si se accedió al método del controlador.

/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
fuente
¿Puedes ampliar tu respuesta si funciona? ¡Gracias!
Claudiu Creanga
Ok, listo ... espero que ayude
leedch
Heh, una vez captó una hilarante respuesta del desarrollador de Magento en el pasado en los viejos foros de MagentoCommerce a su comentario " aún documentando su código ". "Pero el código es autodocumentado ...". Umm no pasó la prueba de Perl Pod entonces, ahora no. Gracias por la explicación anterior, la necesitaba.
Fiasco Labs
3
Magento ahora espera que mueva sus clases de controlador de back-end a una nueva subcarpeta llamada "adminhtml" : esto no es cierto, el controlador puede estar donde lo desee, solo está debajo de la carpeta adminhtml en este caso porque ha definido una ruta de inicio de Pulsestorm_Adminhello_Adminhtmlen config.xml. También debe actualizar cualquier controlador de diseño de administrador, y las llamadas a genera URL de administrador como getUrl().
Jonathan Hussey el
@leedch Me estoy sacando el pelo tratando de descubrir por qué este módulo no funcionará cuando cambie la ruta de administración para SUPEE-6788, no importa lo que intente, obtengo un error 404. Es un módulo simple para imprimir una factura html personalizada. github.com/gaiterjones/magento-htmlinvoice
paj
8

Aquí hay una herramienta de análisis / solución para conflictos de extensión y personalización resultantes del parche Magento SUPEE-6788.

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

Nota: Antes de aplicar cualquier parche o corrección de parche, siempre se recomienda hacer una copia de seguridad de su sitio web y base de datos.

Solo puedes analizar lo que necesitas arreglar.

Para analizar: Ejecutar desde SSH:php -f fixSUPEE6788.php -- analyze

Esto mostrará qué archivos tienen problemas y cómo puede solucionarlos. Esto no aplicará la solución.

O bien, puede aplicar los cambios / arreglos también.

Para aplicar cambios: Ejecutar desde SSH:php -f fixSUPEE6788.php -- fix

Esto analizará y aplicará la corrección automáticamente.

Mukesh Chapagain
fuente
Good Share +1 para ti
Amit Bera
Hice esto pero aún las páginas de administración para todos esos módulos muestran la página 404
Wasiq Shahrukh