Come evitare l'errore 404 sulla nuova installazione dell'estensione


27

È un errore molto comune che viene visualizzato in Magento quando si installa una nuova estensione con config system.xml :

Quando vai alla System->Configuration->Extensionscheda, viene visualizzato un errore 404. È necessario disconnettersi e accedere nuovamente, quindi va bene. Ma c'è un modo per evitarlo?


Non credo, l'albero ACL viene caricato quando accedi e memorizzato nella sessione degli utenti.
Peter O'Callaghan,

Ho un'idea ma non so se sia possibile. Puoi modificare il comportamento di "Magento Connect Manage" per far scadere tutte le sessioni di amministrazione dopo l'installazione dell'estensione. Ma non è possibile farlo dall'ambito di estensione (((. Solo dall'ambito di Connect Manager.
oleksii.svarychevskyi

2
La tua domanda ha risposto alla mia domanda! Grazie!
Ian Phillips,

Ho dovuto lasciare un commento, perché come ha detto Ian: "La tua domanda ha risposto alla mia domanda". La registrazione ha funzionato!
Hans Wassink,

Risposte:


16

Come diceva @Cags, questo non è (facilmente) possibile perché l'albero ACL viene caricato quando la sessione viene inizializzata (AKA quando l'amministratore accede).
Una possibile soluzione alternativa sarebbe quella di sovrascrivere il _isSectionAllowedmetodo nel controller di configurazione del sistema: ( Mage_Adminhtml_System_ConfigController::_isSectionAllowed) e farlo ricaricare l'albero ACL.
Qualcosa di simile a:

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
}

Ciò significa che l'albero ACL verrà ricaricato ogni volta che si accede a una sezione di configurazione. Non vedo alcun motivo nel farlo.
Inoltre non puoi farlo per un'estensione specifica. Dovrai riscrivere la classe principale.


Forse sarebbe meglio ripristinare l'albero ACL solo se la sezione non è consentita. Sinceramente non riesco mai a ricordare di aver tentato di caricare una sezione non consentita da ACL se non dopo l'installazione di un modulo e prima che l'amministratore si riconnettesse.
pspahn,

Un'idea folle da quando non l'ho mai provata e non sono sicuro che la sessione sia disponibile a questo punto, ma potrebbe essere possibile ricaricare dallo script di installazione? Ovviamente questo funziona solo se lo script di installazione viene attivato da una richiesta in cui l'utente come amministratore ha effettuato l'accesso e non influirà su altri utenti back-in connessi
Fabian Schmengler,

2
@fschmengler. Non l'ho mai provato prima, ma penso che potrebbe funzionare. Bunt onestamente non penso che valga la pena.
Marius

9

Ho trovato un modo per aggirare questo problema con pochissima personalizzazione. Ciò di cui abbiamo bisogno è:

  1. Una nuova azione del controller che ricarica l'ACL (senza disconnettersi e accedere), quindi reindirizza alla pagina precedente:

    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. Un aggiornamento del layout per l' admin_noroutehandle. Aggiungeremo un collegamento a questa nuova azione del controller direttamente nella pagina di amministrazione 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. E il modello con il link:

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

L'ho messo insieme in una piccola estensione su Github: SSE_AclReload (aggiunge il collegamento anche al menu Sistema> Autorizzazioni )

Potresti anche provare a ricaricare automaticamente l'ACL non appena viene inviata l'azione admin / noroute, ma preferisco 1) sapere cosa sta succedendo e 2) avere una scelta.


1

Se hai qualche problema quando installi una nuova estensione e ottieni la pagina di errore 404, solo una cosa che devi fare è andare in System > Permissions > Roles. Basta salvare il ruolo e non dimenticare di cancellare var/cachee il var/seesion tuo problema è stato risolto.


"cancella var / sessione"? Per disconnettersi da tutti i clienti e svuotare i loro carrelli? No.
Fabian Schmengler,

nup, basta cancellare la sessione, nella cartella var
Hiral Unadkat,

Purtroppo questo è lo stesso. Tranne se non si utilizza il gestore della sessione di file. In quel caso non fa nulla perché non ci sono file
Fabian Schmengler,

Quindi devi solo andare su Sistema> Autorizzazioni> Ruoli e salvare il ruolo.
Hiral Unadkat,

Il che ci porta all'altro problema con la tua risposta: anche se funziona, è più uno sforzo che disconnettersi e riconnettersi, cosa che OP vuole evitare.
Fabian Schmengler,

0

Prova questo:

  1. Vai su Ammin. -> Sistema -> Gestione cache
  2. Seleziona tutto il tipo di cache
  3. Continua ad agire come Aggiorna e premi invia.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.