パッチSUPEE-6788のカスタムモジュールの管理ルーターを更新する方法


34

SUPEE-6788パッチで動作するようにカスタムモジュールを更新する方法がわかりません。手順はあまり明確ではありません。

Alan Stormのチュートリアルに基づいて、テスト用のジェネレーターwww.silksoftware.com/magento-module-creator/に簡単なモジュールを作成しました。adminにカスタムページがあり、完全に正常に動作しますが、SUPEE-6788で必要な修正を適用すると、adminページに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の開発者が理解可能な構成を作成できない、または人間が読み取れるような方法でコードを文書化することさえできないためです。

最初に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();
    }
}

うまくいけば答えを広げられますか?ありがとう!
クラウディウクレアンガ


かつて、かつてのMagentoCommerceフォーラムで、「まだコードを文書化した」というコメントに対する、Magentoの陽気な開発者の応答をキャッチしました。「しかし、コードは自己文書化しています...」。Ummはperl podテストに合格しませんでしたが、今は合格しません。上記の説明をありがとう、私はそれを必要としていました。
フィアスコラボ

3
Magentoは、バックエンドコントローラークラスを「adminhtml」という新しいサブフォルダーに移動することを期待しています。これは真実ではありません。コントローラーはどこにでも配置できます。のPulsestorm_Adminhello_Adminhtmlconfig.xml。また、管理レイアウトハンドルを更新する必要があり、のような管理URLを生成するための呼び出しが必要getUrl()です。
ジョナサンハシー

@leedch SUPEE-6788の管理ルーティングを変更しても、404エラーが発生した場合に、このモジュールが機能しない理由を見つけようとして髪を引き出しています。これは、カスタムHTML請求書を印刷するためのシンプルなモジュールです。github.com/gaiterjones/magento-htmlinvoice
paj

8

以下は、Magento SUPEE-6788パッチに起因する拡張およびカスタマイズの競合のための分析/修正ツールです。

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

注: パッチまたはパッチ修正を適用する前に、Webサイトとデータベースのバックアップを作成することを常にお勧めします。

修正が必要なもののみを分析できます。

分析するには: SSHから実行します。php -f fixSUPEE6788.php -- analyze

これにより、問題のあるファイルとその修正方法が表示されます。これは修正を適用しません。

または、変更/修正も適用できます。

変更を適用するには: SSHから実行します。php -f fixSUPEE6788.php -- fix

これにより、修正が自動的に分析および適用されます。


uのグッドシェア+1
アミットベラ

これを行いましたが、そのようなモジュールすべての管理ページには404ページが表示されています
Wasiq Shahrukh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.