패치 SUPEE-6788에 대한 사용자 정의 모듈의 관리자 라우터를 업데이트하는 방법


34

SUPEE-6788 패치 와 함께 작동하도록 사용자 지정 모듈을 업데이트하는 방법을 잘 모르겠습니다 . 지침 이 명확하지 않습니다.

Alan Storm의 튜토리얼을 바탕으로 www.silksoftware.com/magento-module-creator/ 생성기에서 간단한 모듈을 테스트 용으로 만들었습니다. 관리자에는 사용자 정의 페이지가 있으며 완벽하게 작동하지만 SUPEE-6788에 필요한 수정 사항을 적용하면 관리자 페이지에 404 오류가 표시됩니다.

사용자 지정 관리 페이지의 URL은 다음과 같습니다.

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

모듈 구성은 다음과 같습니다.

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

컨트롤러는 다음과 같습니다.

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

해결책

다음 <routers>과 같은 패치 지침에 따라 부품을 교체했습니다 .

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

그러나 이제 URL은 404 error다음과 같이 표시됩니다 .

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

새 패치에 맞게 모듈을 올바르게 수정하는 방법은 무엇입니까? config.xml이 패치를 적용한 후 관리 페이지의 URL 을 업데이트 하거나 변경해야합니까?

답변:


42

패치 6788에서 권장하는대로 Magento의 새로운 방식을 사용하도록 사용자 지정 모듈을 변경했습니다. 따라서 다른 스레드에 대한 참조로 여기에이 스레드의 질문에 대한 답변을 제공합니다.

  1. config.xml 파일에서 라우터로 변경하십시오.

전에:

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

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <adminhello before="Mage_Adminhtml">Pulsestorm_Adminhello_Adminhtml</adminhello>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>
  1. 컨트롤러로 변경

2.1.

경로 전

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

경로 후

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

2.2

수업 전에

class Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController extends Mage_Adminhtml_Controller_Action 
{
..
}

방과후

class Pulsestorm_Adminhello_Adminhtml_Adminhello_AdminhellobackendController extends Mage_Adminhtml_Controller_Action
{
...
}
  1. adminhtml.xml 파일이있는 경우 (아래 예와 같이)

전에

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

<?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. 코드 변경

이전 : URL 가져 오기

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

이후 : URL 가져 오기

Mage::getUrl('adminhtml/adminhello_adminhellobackend/doSomething')
  1. 레이아웃 파일 변경 (예를 들어 아래와 같이 레이아웃 파일이있는 경우)

레이아웃하기 전에

<adminhello_adminhtml_adminhellobackend_index>
...
</adminhello_adminhtml_adminhellobackend_index>

레이아웃 후

<adminhtml_adminhello_adminhellobackend_index>
...
</adminhtml_adminhello_adminhellobackend_index>

우수한! 매력처럼 일했다!
BENN1TH

17

나는 이것을 알아내는 데 몇 시간을 잃었다. Magento의 Devs가 이해할 수있는 구성을 만들 수 없거나 사람이 읽을 수있는 방식으로 코드를 문서화 할 수 없기 때문입니다.

config.xml을 먼저 살펴 보자

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

태그의 전체 의미가 변경되었습니다. "모듈"아래의 태그는 단지 임의의 이름입니다. XML을 컴파일 할 때 덮어 쓰지 않도록 고유해야합니다. URL에 영향을 미칩니다.

<admin_adminhello after= ..... >

Magento는 이제 백엔드 컨트롤러 클래스를 "adminhtml"이라는 새 하위 폴더로 이동할 것으로 예상합니다. config.xml에서 _Adminhtml 을 추가하여 클래스 이름 접미 부를 변경해야합니다 .

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

귀하의 경우 폴더는

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

이제 진짜 문제입니다. 다른 (더 나은) 시스템을 사용하면 "FrontName"태그를 사용하여 자신의 네임 스페이스를 정의했습니다. 이 고급 스러움이 더 이상 없으므로 컨트롤러 이름이 고유해야합니다. 그렇지 않으면 다른 확장과 충돌합니다. 따라서 "AdminController.php"와 같은 이름의 컨트롤러는 더 이상 좋지 않습니다. " AdminhelloController.php " 와 같이 프로젝트 고유의 것으로 만들어야합니다.

그러면 귀하의 URL이

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

파일 이름을 바꾸거나 파일을 이동 한 후 컨트롤러 클래스 이름을 조정하는 것을 잊지 마십시오

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

이 경우 이름은 Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController입니다.

물론 백엔드에서 사용하는 메뉴 항목양식에 사용 된 URL도 조정해야합니다.

또한 index.php 파일 에서 개발자 모드 를 켜십시오 . 컨트롤러에 버그가 있으면 404도 얻습니다. Develeport 모드에서는 Stacktrace 오류가 발생합니다.

또한 컨트롤러가 호출되면 로그를 작성하여 컨트롤러 메소드에 액세스했는지 확인할 수 있습니다.

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

작동하면 답을 확장 할 수 있습니까? 감사!
Claudiu Creanga

좋아, 끝났어 ... 도움이되기를 바란다
leedch

Heh는 예전 MagentoCommerce 포럼에서 " 아직도 그들의 코드를 문서화 "하는 것에 대한 유쾌한 Magento 개발자 응답을 포착했습니다 . "하지만 코드는 자체 문서화입니다 ...". 음 펄 포드 테스트를 통과하지 못했습니다. 위의 설명에 감사드립니다.
Fiasco Labs

3
Magento는 이제 백엔드 컨트롤러 클래스를 "adminhtml"이라는 새로운 하위 폴더로 옮길 것으로 예상합니다. 이것은 사실이 아닙니다. 컨트롤러는 원하는 위치에있을 수 있습니다. 시작 경로를 정의했기 때문에이 경우 adminhtml 폴더에만 있습니다. 의 Pulsestorm_Adminhello_Adminhtmlconfig.xml에있다. 또한 관리자 레이아웃 핸들을 업데이트하고 관리자 URL과 같은 호출을 생성해야합니다 getUrl().
Jonathan Hussey

@leedch SUPEE-6788에 대한 관리자 라우팅을 변경할 때 404 오류가 발생 하더라도이 모듈이 작동하지 않는 이유를 알아 내려고 노력하고 있습니다. 맞춤 HTML 인보이스를 인쇄하는 간단한 모듈입니다. github.com/gaiterjones/magento-htmlinvoice
paj

8

다음은 Magento SUPEE-6788 패치로 인한 확장 및 사용자 지정 충돌에 대한 분석 / 수정 도구입니다.

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

참고 : 패치 또는 패치 수정을 적용하기 전에 항상 웹 사이트 및 데이터베이스를 백업하는 것이 좋습니다.

수정해야하는 것만 분석 할 수 있습니다.

분석하려면 : SSH에서 실행하십시오.php -f fixSUPEE6788.php -- analyze

문제가있는 파일과 수정 방법이 표시됩니다. 이 수정은 적용되지 않습니다.

또는 변경 / 수정도 적용 할 수 있습니다.

변경 사항을 적용하려면 다음을 수행 하십시오. SSH에서 실행하십시오.php -f fixSUPEE6788.php -- fix

수정 사항을 자동으로 분석하고 적용합니다.


좋은 몫 +1
Amit Bera

이러한 모든 모듈이 여전히 관리자 페이지는 404 페이지 보이고있다나요
Wasiq 흐르
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.