Como atualizar roteadores de administrador do módulo personalizado para o patch SUPEE-6788

34

Não sei como atualizar os módulos personalizados para trabalhar com o patch SUPEE-6788 , as instruções não são muito claras.

Baseado no tutorial de Alan Storm , criei um módulo simples no gerador www.silksoftware.com/magento-module-creator/ para teste. Ele possui uma página personalizada no admin que funciona perfeitamente, mas quando aplico as correções necessárias no SUPEE-6788, a página do administrador mostra um erro 404.

O URL da página de administração personalizada é:

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

Aqui está a configuração do 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>
    ...

Aqui está o 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();
    }
}

Solução

Substituí a <routers>peça com base nas instruções do patch assim (provavelmente incorretamente):

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

Mas agora o URL mostra apenas 404 error:

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

Como consertar o módulo corretamente para esse novo patch? Eu só preciso atualizar config.xmlou também preciso alterar o URL da página de administração depois de aplicar este patch?

zitix
fonte

Respostas:

42

Consegui mudar meu módulo personalizado para usar a nova maneira Magento, conforme recomendado com o patch 6788. Então, dou aqui como referência para outros, também respondo a pergunta neste tópico.

  1. Mude para o roteador no arquivo config.xml:

Antes:

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

Depois de

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <adminhello before="Mage_Adminhtml">Pulsestorm_Adminhello_Adminhtml</adminhello>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>
  1. Mude para o controlador

2.1

Antes do caminho

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

Depois do caminho

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

2.2

Antes da aula

class Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController extends Mage_Adminhtml_Controller_Action 
{
..
}

Depois da aula

class Pulsestorm_Adminhello_Adminhtml_Adminhello_AdminhellobackendController extends Mage_Adminhtml_Controller_Action
{
...
}
  1. Se você possui um arquivo adminhtml.xml (apenas dê um exemplo como abaixo)

Antes

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

Depois de

<?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. Mudança nos seus códigos

Antes: obter URLs

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

Depois: obter URLs

Mage::getUrl('adminhtml/adminhello_adminhellobackend/doSomething')
  1. Alteração nos arquivos de layout (se você tiver arquivos de layout, por exemplo, abaixo)

Antes do layout

<adminhello_adminhtml_adminhellobackend_index>
...
</adminhello_adminhtml_adminhellobackend_index>

Após o layout

<adminhtml_adminhello_adminhellobackend_index>
...
</adminhtml_adminhello_adminhellobackend_index>
NgocDB
fonte
Excelente! Trabalhou como um encanto!
BENN1TH 25/03
17

Perdi horas descobrindo isso. Só porque os Devs do Magento não são capazes de fazer uma configuração compreensível, ou mesmo documentar seu código de uma maneira que um ser humano possa lê-lo.

Vamos dar uma olhada no config.xml primeiro

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

Todo o significado das Tags foi alterado. A tag em "módulos" é apenas um nome aleatório. você só precisa garantir que seja exclusivo para garantir que não seja sobrescrito quando o XML for compilado. Tem influência na URL.

<admin_adminhello after= ..... >

Agora, o Magento espera que você mova suas classes de controlador de back-end para uma nova subpasta chamada "adminhtml". É por isso que no config.xml você precisa alterar o sufixo do nome da classe adicionando _Adminhtml .

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

No seu caso, a pasta estaria localizada em

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

Agora o verdadeiro problema. Usando o outro sistema (melhor), você tinha seu próprio espaço para nome definido usando a tag "FrontName". Você não tem mais esse luxo e precisa garantir que seu controlador tenha um nome único. Caso contrário, entraria em conflito com outras extensões. Portanto, os controladores denominados "AdminController.php" não são mais bons, você precisa torná-lo algo específico do projeto, como no seu caso " AdminhelloController.php "

Seu URL mudará para

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

Não se esqueça de ajustar o nome da classe do controlador após renomear ou mover o arquivo

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

Nesse caso, o nome seria Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController

Obviamente, você também deve ajustar os URLs usados ​​nos itens de menu e formulários usados ​​no back-end

Verifique também se você ativou o Modo de desenvolvedor no arquivo index.php . Notei que se o controlador tiver algum bug, você também receberá um 404. No modo Develeport, você recebe um erro do Stacktrace.

O que eu também faria é escrever um log assim que o controlador for chamado, apenas para que você veja se o método do controlador foi acessado.

/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
fonte
você pode expandir sua resposta se funcionar? obrigado!
Claudiu Creanga
Ok, feito ... Espero que ajude
leedch
Heh, certa vez captou uma hilária resposta do desenvolvedor do Magento nos velhos fóruns do MagentoCommerce ao seu comentário " ainda que esteja documentando o código ". "Mas o código é auto-documentado ...". Umm não passou no teste de perl pod, então, não agora. Obrigado pela explicação acima, eu precisava disso.
Fiasco Labs
3
Agora, o Magento espera que você mova suas classes de controlador de back-end para uma nova subpasta chamada "adminhtml" - isso não é verdade, o controlador pode estar onde você quiser, apenas na pasta adminhtml, neste caso, porque você definiu uma rota inicial de Pulsestorm_Adminhello_Adminhtmlem config.xml. Você também precisa atualizar quaisquer identificadores de layout de administrador e chamadas para gerar URLs de administrador getUrl().
Jonathan Hussey
@leedch Estou arrancando os cabelos tentando descobrir por que esse módulo não funcionará quando eu alterar o roteamento de administrador do SUPEE-6788, não importa o que eu tente, recebo um erro 404. É um módulo simples para imprimir uma fatura html personalizada. github.com/gaiterjones/magento-htmlinvoice
paj
8

Aqui está uma ferramenta de análise / correção para conflitos de extensão e customização resultantes do patch Magento SUPEE-6788.

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

Nota: Antes de aplicar qualquer patch ou correção, é sempre recomendável fazer backup do seu site e banco de dados.

Você só pode analisar o que precisa ser corrigido.

Para analisar: Execute a partir do SSH:php -f fixSUPEE6788.php -- analyze

Isso mostrará quais arquivos têm problemas e como você pode corrigi-los. Isso não aplicará a correção.

OU, você pode aplicar as alterações / correções também.

Para aplicar alterações: Execute a partir do SSH:php -f fixSUPEE6788.php -- fix

Isso analisará e aplicará a correção automaticamente.

Mukesh Chapagain
fonte
Boa parte +1 para você
Amit Bera
Fez isso, mas ainda páginas de administração para todos esses módulos estão mostrando página 404
Wasiq Shahrukh