Yeni uzantı kurulumunda 404 hatası nasıl önlenir


27

System.xml config ile yeni bir eklenti yüklediğinizde Magento'da görülen çok yaygın bir hatadır :

System->Configuration->ExtensionSekmeye gittiğinizde , 404 hatası gösterilir. Oturumu kapatıp tekrar giriş yapmanız gerekiyor ve sonra sorun yok. Fakat bundan kaçınmanın bir yolu var mı?


Buna inanmıyorum, oturum açtığınızda ve kullanıcılar oturumunda kaydedildiğinde ACL ağacı yükleniyor.
Peter O'Callaghan

Bir fikrim var ama mümkün olup olmadığını bilmiyorum. Uzantı yüklendikten sonra tüm yönetici oturumlarının süresinin dolması için "Magento Connect Manage" davranışını değiştirebilirsiniz. Ancak uzatma kapsamından yapmak mümkün değildir (((. Sadece Connect Manager kapsamından.
oleksii.svarychevskyi

2
Sorunuz sorumu cevapladı! Teşekkürler!
Ian Phillips

Bir yorum bırakmak zorunda kaldım, çünkü Ian'ın dediği gibi: "Sorunuz sorumu yanıtladı" Günlük hile yaptı!
Hans Wassink

Yanıtlar:


16

@Cags dediği gibi, bu (kolay) mümkün değildir çünkü oturum başlatıldığında ACL ağacı yüklenir (yönetici oturum açtığında AKA).
Olası bir geçici çözüm _isSectionAllowed, sistem yapılandırma denetleyicisindeki yöntemi geçersiz kılmak Mage_Adminhtml_System_ConfigController::_isSectionAllowedve ACL ağacını yeniden yüklemektir.
Gibi bir şey:

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
}

Ancak bu, bir yapılandırma bölümüne her girdiğinizde ACL ağacının yeniden yükleneceği anlamına gelir. Bunu yapmanın bir anlamı yok.
Ayrıca belirli bir uzantı için yapamazsınız. Ana sınıfı yeniden yazmak zorunda kalacaksınız.


Belki ACL ağacını sadece bölüme izin verilmiyorsa sıfırlamak daha iyi olur. Dürüst olmak gerekirse, bir modül kurulumundan sonra ve yönetici relog'larından önce ACL tarafından izin verilmeyen bir bölümü yüklemeye çalıştığımı hatırlayamıyorum.
pspahn

Sadece çılgınca bir fikir hiç denemedim ve bu noktada oturumun mevcut olup olmadığından emin değilim, ancak yükleme komut dosyasından yeniden yüklenebilir mi? Tabii ki bu yalnızca yükleme komut dosyası sizin yönetici olarak giriş yaptığınız ve giriş yapan diğer arka uç kullanıcılarını etkilemeyecek bir istek tarafından tetiklendiğinde işe yarar
Fabian Schmengler

2
@fschmengler. Daha önce denemedim, ama işe yarayacağını düşünüyorum. Dürüst olmak gerekirse, bence belaya değmez.
Marius

9

Bu konuda çok az özelleştirme ile bir yol buldum. İhtiyacımız olan şey:

  1. ACL'yi yeniden yükleyen yeni bir denetleyici eylemi (oturumu kapatıp girmeden), ardından önceki sayfaya yönlendirir:

    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_norouteTanıtıcı için bir düzen güncelleme . Bu yeni denetleyici işlemine doğrudan admin 404 sayfasında bir link ekleyeceğiz:

    <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. Ve bağlantıya sahip şablon:

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

Birlikte Github: SSE_AclReload'daki küçük bir uzantıya attım (bağlantıyı Sistem> İzinler menüsüne de ekler )

Ayrıca admin / noroute eylemi gönderilir yüklenmez ACL'yi otomatik olarak yeniden yüklemeyi deneyebilirsiniz, ancak 1) ne olup bittiğini ve 2) bir seçeneğin olduğunu bilmeyi tercih ederim.


1

Yeni bir uzantı yüklediğinizde ve 404 hata sayfasıyla karşılaştığınızda sorun yaşarsanız, yapmanız gereken tek şey girmeniz yeterlidir System > Permissions > Roles. Sadece rolü kaydedin ve temizlemeyi unutmayın var/cacheve var/seesion Ve probleminiz çözüldü.


"var / oturumu temizle"? Tüm müşterilerin oturumu kapatıp arabalarını boşaltmak için mi? Hayır!
Fabian Schmengler

nup, sadece var klasörü, oturumu temizle
Hiral Unadkat

Ne yazık ki bu aynı. Dosya oturum işleyicisini kullanmazsanız hariç. Bu durumda hiçbir şey yapmıyor çünkü dosya yok
Fabian Schmengler

O zaman yapmanız gereken Sistem> İzinler> Roller bölümüne gitmek ve rolü kaydetmek.
Hiral Unadkat

Bu da cevabınızla bizi diğer soruna getiriyor: Çalışsa bile, OP'den kaçınmak isteyen, oturumu kapatıp tekrar açmaktan daha fazla çaba harcıyor.
Fabian Schmengler

0

Bunu dene:

  1. Git > Sistem - -> Önbellek Yönetimi Yönetici
  2. Tüm Önbellek Tipini Seç
  3. Yenile olarak harekete geçin ve gönder düğmesine basın.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.