Magento: 404 Fehlerseite beim Admin-Login

Es kommt vor, dass Dinge in Magento vorkommen, die eigentlich nicht vorkommen sollten und wenn sie doch vorkommen, so vorkommen, dass man keine Ahnung hat, warum sie so vorkommen, wie sie grade vorkommen.

Bei mir kam eine 404 Fehlerseite vor. Nach dem Einloggen in das Magento-Backend (oder Administrationsbereich, oder Admin oder Shopadministration – im folgenden Admin genannt).

(Jetzt könnte ich länglich darüber schreiben, wie ich erst auf dem Holzweg war, weil ich unmittelbar vor Sichtung dieses Phänomens diesen ZEND-Sicherheitspatch eingespielt habe und daher den Verursacher quasi schon enttarnt zu wissen glaubte. Darüber schreib ich aber nicht. Diese 893 Wörter bleiben in der Wortkiste und weiter gehts mit Wort 894).

Diese 404 Fehlerseite kommt dann vor, wenn man (bei mir übrigens in 1.6er Installationen) unter:

System->Konfiguration->Allgemein->Web->Url-Optionen die Frage „StoreCode zu URLs hinzufügen?“ mit „Ja“ beanwortet UND in der local.xml (unter app/etc) einen anderen Admin-Front-Namen als „admin“ wählt (<frontName><![CDATA[admin]]></frontName>), was man ja per se tun sollte.

(Im folgenden „das Phänomen“ genannt).

Das stört zwar die Funktionalität des Shops nicht, ist aber dennoch irgendwie lästig. Das Phänomen kriegt man weg, indem man eine wirklich winzige Erweiterung schreibt:

Man braucht einen Event, einen Observer und eine Admin-Template-Seite.

Der „Fehler“ liegt nämlich darin, dass im Formular der Login-Seite keine Admin-Url eingegeben ist, sondern die „action“ des Formulars leer ist. Diese action muss auf <form method=“post“ action=“<?php echo $this->getUrl(‚adminhtml‘) ?>“ id=“loginForm“> geändert werden.

Also fange ich mal damit an. Dafür legt man einen Ordner an, der da lautet wie sein Namespace (im folgenden ’neoshops“ genannt): app/design/adminhtml/default/default/template/neoshops/ und kopiert die login.phtml aus dem Default-Template (app/design/adminhtml/default/default/template/login.phtml) dort hinein und fügt als Formular-action „<?php echo $this->getUrl(‚adminhtml‘) ?>“ hinzu.

Dann braucht man eine Methode, die beim Aufruf der Seite das Default-Template gegen das eigene tauscht. Da dies mittels Event-Observer geschehen soll, statt irgendwas zu überschreiben, ist dies eine kleine Methode in der Observer-Klasse (app/code/local/Neoshops/AdminLogin/Model/Observer.php):

class Neoshops_AdminLogin_Model_Observer {
    public function htmlBefore (Varien_Event_Observer $observer) {
        /** @var $block Mage_Adminhtml_Block_Template  */
        $block = $observer->getEvent()->getBlock();
        $template = $block->getTemplate();
        if ($template == 'login.phtml') {
            $block->setTemplate('neoshops/login.phtml');
        }
    }
}

Und letztlich braucht man nur noch Magento Bescheid sagen, dass vor dem Einsammeln der Templates diese Veränderung berücksichtig werden soll:

<adminhtml>
        <events>
            <adminhtml_block_html_before>
                <observers>
                    <neoshops_adminhtml_block_html_before>
                        <class>neoshops_adminlogin/observer</class>
                        <method>htmlBefore</method>
                    </neoshops_adminhtml_block_html_before>
                </observers>
            </adminhtml_block_html_before>
        </events>
    </adminhtml>

Die vollständige config.xml meines „AdminLogin“-Extensionschen sieht also so aus:

<?xml version="1.0" encoding="UTF-8" ?>
<config>
    <modules>
        <Neoshops_AdminLogin>
            <version>0.1.0</version>
        </Neoshops_AdminLogin>
    </modules>
    <global>
        <models>
            <neoshops_adminlogin>
                <class>Neoshops_AdminLogin_Model</class>
            </neoshops_adminlogin>
        </models>
    </global>
    <adminhtml>
        <events>
            <adminhtml_block_html_before>
                <observers>
                    <neoshops_adminhtml_block_html_before>
                        <class>neoshops_adminlogin/observer</class>
                        <method>htmlBefore</method>
                    </neoshops_adminhtml_block_html_before>
                </observers>
            </adminhtml_block_html_before>
        </events>
    </adminhtml>
</config>

Nun nur noch die Modul-Bekanntmach-Datei app/etc/modules/Neoshops_AdminLogin.xml abspeichern und der Login sollte wieder fehlerfrei funkionieren.

        <?xml version="1.0" encoding="UTF-8" ?>
        <config>
            <modules>
                <Neoshops_AdminLogin>
                    <codePool>local</codePool>
                    <active>true</active>
                </Neoshops_AdminLogin>
            </modules>
        </config>

Im folgenden „Lösung“ genannt.

André Herrn war so nett und hat die Lösung in eine kleine Extension (mit Composer) auf Github gepackt:
https://github.com/romfr/404adminlogin

Carmen Bremen
Magento Certified Developer
Magento Certified Solution Specialist
Magento Freelancer


Magento Certified Developer Magento Certified Solution Specialist



Magento Stammtisch Köln
Magento Stammtisch KölnDer nächste Kölner Magento Stammtisch findet statt am 20. Juno 2016. (Xing-Event) Wer Interesse hat, kann sich in die Stammtisch-Gruppe auf Xing eintragen, ich sende eine Rund-E-Mail mit Details kurz vor dem Event!

Kontakt

Carmen Bremen.

In: Xing
In: Skype
In: Twitter
In: Google+
Per: Formular
Innermail: Office (t) neoshops.de
In Köln: In der Lößbörde 1, 50859 Köln
Per Handy: +49 [0]151- 7000 7107

Letzte Beiträge