Bagaimana cara menghindari 404 kesalahan pada pemasangan ekstensi baru

27

Ini adalah kesalahan yang sangat umum yang muncul di Magento ketika Anda menginstal ekstensi baru dengan konfigurasi system.xml :

Ketika Anda pergi ke System->Configuration->Extensiontab, kesalahan 404 ditampilkan. Anda harus keluar dan masuk lagi lalu tidak masalah. Tetapi apakah ada cara untuk menghindari ini?

JohnyFree
sumber
Saya tidak percaya begitu, pohon ACL dimuat ketika Anda masuk dan disimpan di sesi pengguna.
Peter O'Callaghan
Saya punya satu ide tetapi saya tidak tahu apakah itu mungkin. Anda dapat mengubah perilaku "Magento Connect Manage" untuk mengakhiri semua sesi admin setelah ekstensi diinstal. Tapi itu tidak mungkin dilakukan dari lingkup ekstensi (((. Hanya dari lingkup Connect Manager.
oleksii.svarychevskyi
2
Pertanyaan Anda menjawab pertanyaan saya! Terima kasih!
Ian Phillips
Saya harus meninggalkan komentar, karena seperti yang dikatakan Ian: "Pertanyaan Anda menjawab pertanyaan saya". Penebangan berhasil!
Hans Wassink

Jawaban:

16

Seperti yang dikatakan @Cags, ini tidak (mudah) mungkin karena pohon ACL dimuat ketika sesi diinisialisasi (AKA ketika admin masuk).
Solusi yang mungkin adalah mengganti _isSectionAllowedmetode dalam pengontrol konfigurasi sistem: ( Mage_Adminhtml_System_ConfigController::_isSectionAllowed) dan membuatnya memuat ulang pohon ACL.
Sesuatu seperti:

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
}

Tapi ini berarti pohon ACL akan dimuat ulang setiap kali Anda mengakses bagian konfigurasi. Saya melihat tidak ada gunanya melakukan ini.
Anda juga tidak dapat melakukannya untuk satu ekstensi spesifik. Anda harus menulis ulang kelas inti.

Marius
sumber
Mungkin akan lebih baik untuk hanya mereset pohon ACL jika bagian itu tidak diperbolehkan. Jujur saya tidak pernah bisa mengingat mencoba memuat bagian yang tidak diizinkan oleh ACL selain setelah menginstal modul dan sebelum admin relogs.
pspahn
Hanya ide gila karena saya tidak pernah mencobanya dan saya tidak yakin apakah sesi tersedia pada saat ini, tetapi mungkinkah untuk memuat ulang dari skrip instalasi? Tentu saja ini hanya berfungsi jika skrip instal dipicu oleh permintaan di mana Anda sebagai admin login dan itu tidak akan memengaruhi pengguna backend login lainnya
Fabian Schmengler
2
@fschmengler. Saya belum pernah mencobanya sebelumnya, tetapi saya pikir itu bisa berhasil. Bunt jujur ​​saya tidak berpikir itu sepadan dengan masalahnya.
Marius
9

Saya menemukan jalan keluar dengan sedikit penyesuaian. Yang kita butuhkan adalah:

  1. Tindakan pengontrol baru yang memuat ulang ACL (tanpa logout dan masuk), kemudian mengarahkan kembali ke halaman sebelumnya:

    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. Pembaruan tata letak untuk admin_noroutepegangan. Kami akan menambahkan tautan ke tindakan pengontrol baru ini langsung di halaman 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. Dan templat dengan tautan:

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

Saya melemparkannya bersama ke dalam sebuah ekstensi kecil di Github: SSE_AclReload (menambahkan tautan juga ke menu System> Permissions )

Anda juga dapat mencoba memuat ulang ACL secara otomatis segera setelah tindakan admin / noroute dikirim, tetapi saya lebih suka 1) tahu apa yang sedang terjadi dan 2) punya pilihan.

Fabian Schmengler
sumber
1

Jika Anda memiliki masalah ketika Anda menginstal ekstensi baru dan mendapatkan halaman kesalahan 404 maka hanya satu hal yang perlu Anda lakukan adalah masuk System > Permissions > Roles. Simpan saja perannya dan jangan lupa untuk membersihkan var/cachedan var/seesion Dan masalah Anda telah teratasi.

Hiral Unadkat
sumber
"hapus var / sesi"? Untuk keluar semua pelanggan dan mengosongkan gerobak mereka? Nggak.
Fabian Schmengler
nup, cukup hapus sesi, di folder var
Hiral Unadkat
Sayangnya ini sama. Kecuali jika Anda tidak menggunakan penangan sesi file. Dalam hal ini tidak melakukan apa-apa karena tidak ada file
Fabian Schmengler
Maka yang perlu Anda lakukan adalah masuk ke System> Izin> Peran dan simpan peran.
Hiral Unadkat
Yang membawa kami ke masalah lain dengan jawaban Anda: bahkan jika itu berhasil, itu lebih merupakan upaya daripada keluar dan kembali, yang ingin dihindari OP.
Fabian Schmengler
0

Coba ini:

  1. Buka Admin -> Sistem -> Manajemen Cache
  2. Pilih semua Jenis Cache
  3. Terus bertindak sebagai Segarkan dan tekan kirim.
shefali singh
sumber