system.xml configを使用して新しい拡張機能をインストールすると、Magentoに表示される非常に一般的なエラーです。
System->Configuration->Extension
タブに移動すると、404エラーが表示されます。ログアウトして再度ログインする必要がありますが、その後は問題ありません。しかし、これを回避する方法はありますか?
system.xml configを使用して新しい拡張機能をインストールすると、Magentoに表示される非常に一般的なエラーです。
System->Configuration->Extension
タブに移動すると、404エラーが表示されます。ログアウトして再度ログインする必要がありますが、その後は問題ありません。しかし、これを回避する方法はありますか?
回答:
@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を(ログアウトおよびログインせずに)リロードし、前のページにリダイレクトする新しいコントローラーアクション:
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();
}
}
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>
そして、リンク付きのテンプレート:
<a href="<?php echo $this->getUrl('adminhtml/permissions_aclReload/index'); ?>">
<?php echo $this->__('Reload ACL'); ?>
</a>
私はそれをGithubの小さな拡張機能にまとめました:SSE_AclReload(リンクを[ システム ] > [権限 ]メニューにも追加します)
admin / norouteアクションがディスパッチされるとすぐにACLを自動的にリロードすることもできますが、1)何が起こっているかを知り、2)選択肢があることを好みます。
新しい拡張機能をインストールするときに問題が発生し、404エラーページが表示される場合、必要なことは1つだけですSystem > Permissions > Roles
。役割を保存し、クリアすることvar/cache
を忘れないでくださいvar/seesion
そして、あなたの問題は解決されました。