新しい拡張機能のインストールで404エラーを回避する方法


27

system.xml configを使用して新しい拡張機能をインストールすると、Magentoに表示される非常に一般的なエラーです。

System->Configuration->Extensionタブに移動すると、404エラーが表示されます。ログアウトして再度ログインする必要がありますが、その後は問題ありません。しかし、これを回避する方法はありますか?


私はそうは思いません。ログインするとACLツリーがロードされ、ユーザーセッションに保存されます。
ピーターオキャラハン14年

アイデアは1つありますが、それが可能かどうかはわかりません。「Magento Connect Manage」の動作を変更して、拡張機能のインストール後にすべての管理セッションを期限切れにすることができます。しかし、そのことはできません(((延長の範囲から行うにのみ接続マネージャの範囲から。。
oleksii.svarychevskyi

2
あなたの質問が私の質問に答えました!ありがとう!
イアンフィリップス

イアンが言ったように、「あなたの質問が私の質問に答えた」ので、私はコメントを残さなければなりませんでした。ロギングがうまくいきました!
ハンスワッシンク

回答:


16

@Cagsが言ったように、セッションが初期化されると(管理者がログインすると別名)ACLツリーがロードされるため、これは(簡単に)不可能です。
考えられる回避策は_isSectionAllowed、システム構成コントローラーのメソッドをオーバーライドMage_Adminhtml_System_ConfigController::_isSectionAllowedすることです:()、ACLツリーを再ロードします。
何かのようなもの:

protected function _isSectionAllowed($section)
{
    $session = Mage::getSingleton('admin/session');
    $session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());//reload the tree
    return parent::_isSectionAllowed($secntion); //all the code from the original method
}

ただし、これは、設定セクションにアクセスするたびにACLツリーがリロードされることを意味します。これを行う意味はありません。
また、特定の拡張機能に対してはできません。コアクラスを書き換える必要があります。


セクションが許可されていない場合にのみ、ACLツリーをリセットする方が良いでしょう。モジュールのインストール後、管理者が再ログインする前以外は、ACLで許可されていないセクションをロードしようとしたことを思い出すことはできません。
pspahn 14

私は試したことがないので、この時点でセッションが利用可能かどうかわかりませんが、インストールスクリプトからリロードすることは可能ですか?インストールスクリプトはあなたが管理者としてログインしている要求によってトリガされ、それがバックエンドユーザーでログインし、他の影響はありません場合はもちろん、これはのみ動作します
ファビアンSchmengler

2
@fschmengler。試したことはありませんが、うまくいくと思います。バント正直言って、私はそれがトラブルの価値があるとは思わない。
マリウス

9

私は非常に少ないカスタマイズでこれを回避する方法を見つけました。必要なのは:

  1. ACLを(ログアウトおよびログインせずに)リロードし、前のページにリダイレクトする新しいコントローラーアクション:

    class SSE_AclReload_Adminhtml_Permissions_AclReloadController extends Mage_Adminhtml_Controller_Action
    {
        public function indexAction()
        {
            $session = Mage::getSingleton('admin/session');
            $session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());
            Mage::getSingleton('adminhtml/session')->addSuccess($this->__('ACL reloaded'));
            $this->_redirectReferer();
        }
    }
  2. admin_norouteハンドルのレイアウトの更新。admin 404ページで、この新しいコントローラーアクションへのリンクを直接追加します。

    <layout version="0.1.0">
        <adminhtml_noroute>
            <reference name="content">
                <block type="adminhtml/template" name="content.aclReload" after="content.noRoute" template="sse_aclreload/button.phtml" />
            </reference>
        </adminhtml_noroute>
    </layout>
  3. そして、リンク付きのテンプレート:

    <a href="<?php echo $this->getUrl('adminhtml/permissions_aclReload/index'); ?>">
        <?php echo $this->__('Reload ACL'); ?>
    </a>

私はそれをGithubの小さな拡張機能にまとめました:SSE_AclReload(リンクを[ システム ] > [権限 ]メニューにも追加します)

admin / norouteアクションがディスパッチされるとすぐにACLを自動的にリロードすることもできますが、1)何が起こっているかを知り、2)選択肢があることを好みます。


1

新しい拡張機能をインストールするときに問題が発生し、404エラーページが表示される場合、必要なことは1つだけですSystem > Permissions > Roles。役割を保存し、クリアすることvar/cacheを忘れないでくださいvar/seesion そして、あなたの問題は解決されました。


「clear var / session」?すべての顧客をログアウトしてカートを空にしますか?いや。
ファビアンシュメングラー

NUP、ちょうどvarフォルダに、セッションをクリア
Hiral Unadkat

残念ながらこれは同じです。ファイルセッションハンドラを使用しない場合を除きます。その場合、ファイルがないため何も行われません
ファビアンシュメングラー

次に、[システム]> [権限]> [役割]に移動して、役割を保存する必要があります。
Hiral Unadkat

それはあなたの答えに関する他の問題に私たちをもたらします:たとえそれがうまくいくとしても、OPが避けたいログアウトと再ログインよりも多くの努力です。
ファビアンシュメングラー

0

これを試して:

  1. 移動管理- >システム- >キャッシュ管理
  2. すべてのキャッシュタイプを選択します
  3. 更新としてアクションを保持し、送信を押します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.