Magento “mini login”

Es gibt in Magento bereits ein Template mini.login.phtml. Wer diese einsetzen möchte wird sofort merken, dass man dieses auf jeden Fall anpassen muss. Genau das werden wir in diesem Tutorial tun. Initiator war ein Beitrag aus dem deutschen Magentoforum.
Dafür müssen wir kein eigenes Modul erstellen. Wir benötigen dafür ein Template, einige Grafiken, etwas CSS sowie eine Anpassung im Layout (XML).
Umsetzung
Als erstes erstelle ich das Template app/design/frontend/default/[ihr theme]/template/customer/form/mxperts.login.phtml
<div class="box base-mini mini-login">
<div class="head">
<h4><?php echo $this->__('Login') ?></h4>
</div>
<div class="content">
<form id="mini_login_form" action="<?php echo $this->getPostActionUrl() ?>" method="post">
<div>
<div id="email-div" >
<input id="logemail" type="text" class="input-text required-entry" name="login[username]" value="<?php echo $this->helper('catalogSearch')->getEscapedQueryText() ?>" title="<?php echo $this->__('Email Address') ?>" />
</div>
<div id="pass-div" >
<input id="logpass" type="password" class="input-text required-entry validate-password" name="login[password]" value="<?php echo $this->helper('catalogSearch')->getEscapedQueryText() ?>" />
<input type="image" src="<?php echo $this->getSkinUrl('images/btn_go.png') ?>" alt="<?php echo $this->__('Go') ?>"/><br />
</div>
<div id="links-div" >
<a href="<?php echo $this->getUrl('customer/account/create/') ?>" title="<?php echo $this->__('Create New Customer Account'); ?>"><?php echo $this->__('Create New Customer Account'); ?></a><br />
<a href="<?php echo $this->getUrl('customer/account/forgotpassword/') ?>" title="<?php echo $this->__('Password forgotten'); ?>"><?php echo $this->__('Password forgotten'); ?></a>
</div>
<script type="text/javascript">
var searchForm = new Varien.searchForm('email-div', 'logemail', '<?php echo $this->helper('catalogSearch')->__('Email Address') ?>');
new Varien.searchForm('pass-div', 'logpass', '<?php echo $this->helper('catalogSearch')->__('Password') ?>');
</script>
</div>
</form>
</div>
</div>
Damit die Ausghabe des Templates richtig formatiert wird fügen wir der Datei skin/frontend/default/[ihr theme]/css/boxes.css folgende CSS-Anweisungen hinzu.
/* Mini Login */
.mini-login .head h4 { background-image:url(../images/icon_lock.gif); }
#email-div {
padding-left: 14px;
margin-bottom: 4px;
background-image: url(../images/login_username.png);
background-repeat: no-repeat;
background-position: 0 3px;
}
#pass-div {
padding-left: 14px;
margin-bottom: 4px;
background-image: url(../images/login_password.png);
background-repeat: no-repeat;
background-position: 0 3px;
}
#links-div {
padding-left: 14px;
margin-bottom: 4px;
}
#mini_login_form #logpass {
width: 98px;
}
Folgende Grafiken werden für das CSS benötigt. (Sie finden alle Dateien am Ende des Tutorials zum Download)

Die 3 Grafiken müssen in das Verzeichnis skin/frontend/default/[ihr theme]/images/ kopiert werden.
Zum Schluss muss noch die Datei app/design/frontend/default/[ihr theme]/layout/customer.xml angepasst werden. Suchen Sie dazu in der Datei den Bereich Load this update on every page when customer is logged out und fügen Sie vor </customer_logged_out> folgenden Inhalt ein:
<reference name="right">
<block type="customer/form_login" name="mini_login" template="customer/form/mxperts.login.phtml" before="-" />
</reference>
Nun noch den Cache im Backend leeren und die Loginbox sollte, wie in unserem Demoshop, in der rechten Spalte an erster Stelle erscheinen.
Download: mxperts_login.zip
Leider haben wir nun den unschönen Effekt, dass alle Seiten im Titel den Text “Kundenlogin” beinhalten. Woher kommt das? Die Definition unseres Blocks zeigt uns welche Klasse verwendet wird.
block type=”customer/form_login” = app\code\core\Mage\Customer\Block\Form\Login.php. Wenn wir diese Datei öffnen, sehen wir, dass in der Funktion _prepareLayout() der Titel verändert wird.
...
protected function _prepareLayout()
{
$this->getLayout()->getBlock('head')->setTitle(Mage::helper('customer')->__('Customer Login'));
...
Um dies zu korrigieren benötigen wir eine Erweiterung. Diese soll die Klasse Mage_Customer_Block_Form_Login überschreiben.
Dazu erstellen wir das Modul Mxperts_Customer.
1. app\etc\modules\Mxperts_Customer.xml
<?xml version="1.0"?>
<config>
<modules>
<Mxperts_Customer>
<active>true</active>
<codePool>local</codePool>
</Mxperts_Customer>
</modules>
</config>
2. app\code\local\Mxperts\Customer\etc\config.xml
<?xml version="1.0"?>
<config>
<modules>
<Mxperts_Customer>
<version>0.1.0</version>
</Mxperts_Customer>
</modules>
<global>
<blocks>
<customer>
<rewrite>
<form_minilogin>Mxperts_Customer_Block_Form_Minilogin</form_minilogin>
</rewrite>
</customer>
</blocks>
</global>
</config>
3. app\code\local\Mxperts\Customer\Block\Form\Minilogin.php
<?php
class Mxperts_Customer_Block_Form_Minilogin extends Mage_Customer_Block_Form_Login
{
protected function _prepareLayout()
{
// nothing here ...
}
}
4. Ändern der app/design/frontend/default/[ihr theme]/layout/customer.xml
Suchen Sie dazu in der Datei den Bereich Load this update on every page when customer is logged out und fügen Sie vor </customer_logged_out> folgenden Inhalt ein:
<reference name="right">
<block type="customer/form_minilogin" name="form_minilogin" template="customer/form/mxperts.login.phtml" before="-" />
</reference>
Nun wieder den Cache löschen – der Titel ist wieder so wie er sein soll.
Download: mxperts_login2.zip
Viele Spaß damit
Johannes Teitge
Vielen Dank für das Tutorial!
Ich bin zwar kürzlich über diese Standard-Datei gestolpert aber ich habe mir eben nichts dabei gedacht.
Mir ist aber generell aufgefallen das recht viele Dateien dabei sind die im default Template nach der Installation erst einmal nicht verwendet werden. Etwa auch diese flags.phtml mit deren Hilfe man Landesflaggen zur Sprachauswahl anzeigen kann.
Werde mir demnächst mal die Template Dateien komplett ansehen, vielleicht gibt es da ja noch mehr Schätze zu entdecken.
War diese Antwort hilfreich?
LikeDislikeHallo, vielen Dank für das Snippet. Habs auch eingebaut
War diese Antwort hilfreich?
LikeDislikeVielen Dank dafür!
War diese Antwort hilfreich?
LikeDislikeNunja. Da ist noch was: Und zwar steht dann jetzt auf jeder Seite als Titel, der Begriff “Kundenlogin”, was ich nicht als schön empfinde. Wie kann man das ändern?
War diese Antwort hilfreich?
LikeDislikeIch habs mir fast gedacht – man kommt nicht daran vorbei ein eigenes Modul zu programmieren.
app\code\core\Mage\Customer\Block\Form\login.php enthält die Klasse die verwendet wird. Dort wird der Title neu gesetzt. Also müssen wir eine Neue Klasse erstellen (Mage_Customer_Block_Form_Minilogin).
Ich habe zwar einen Forumsbeitrag gefunden – der ist aber inakzeptabel.
http://www.magentocommerce.com/boards/viewthread/23451/
War diese Antwort hilfreich?
LikeDislikeNun habe ich das Tutorial erweitert und der Titel ist OK ohne die Core-Files zu ändern.
War diese Antwort hilfreich?
LikeDislikeok das hat auch wunderbar geklappt, danke
Schreib mal bitte noch zu Punkt 4 “ändern der custom.xml, dass man nach dem suchen soll:
und was man da ersetzen muss. Das kann man nur aus der *.zip sich raussuchen. Für die die zu Faul sind selbst zu suchen
dann haste noch 2 Schreibfehler
“Nun wieder den Cache löschen der Titel ist OK.”
“Um dies zu korrigieren benötigen wir eine Erweiterung. Diese soll die Klasse Mage_Customer_Block_Form_Login überschreiben.”
aber sonst alles Topp. danke
War diese Antwort hilfreich?
LikeDislikeIch gebe zu es war schon etwas früh/spät und ich hatte keine Lust mehr
Deine angesprochenen Punkte habe ich korrigiert – danke für den Hinweise.
War diese Antwort hilfreich?
LikeDislikeDie Lösung um die Seitenbezeichnung “Kundenlogin” wieder loszubekommen, funktioniert bei mir nicht. Sobald ich die Änderungen in der customer.xml von:
in das hier ändere:
verschwindet meine Mini Login Box. Ich weiß ehrlich gesagt nicht, woran das liegen könnte.
War diese Antwort hilfreich?
LikeDislikeHallo nikl, ich schließe mich der Anfrage an – bei mir wird es momentan auch noch mit ausgegeben.
http://tutorials.golox.eu/
Liebe Grüße – Daniel
War diese Antwort hilfreich?
LikeDislikeAlso – bei mir klappt das einwandfrei.
War diese Antwort hilfreich?
LikeDislikeEs sollte aber funktionieren:
- http://shop.mxperts.de
- http://www.schattenspender24.de
Ich haben aber gerade einen neuen Demo-Shop http://www.demo-store.de aufgesetzt. Dort werde ich das mal testen.
Gruß
Johannes Teitge
War diese Antwort hilfreich?
LikeDislikeIch hatte es zuerst mit einigen a gepassten Bezeichnungen versucht, daher dachte ich, evtl hab ich mich ja irgendwo vertippt, aber auch als ich den Code 1zu1 übernommen habe und die Dateien genau wie beschreiben bezeichnet habe, das Problem besteht weiterhin:
Die 1. Methode klappt ohne Probleme, aber sobald ich den abgeänderten Code in die customer.xml einfüge, verschwindet die Box wieder.
Ich hab jetzt halt doch den Tip aus dem Forum verwendet: In app-code-local-Mage-Customer-Block-Form in der Datei Login.php folgendes ausgeklammert:
protected function _prepareLayout()
{
$this->getLayout()->getBlock(‘head’)->setTitle(Mage::helper(‘customer’)->__(‘Customer Login’));
return parent::_prepareLayout();
}
Jetzt kann ich die 1. Methode verwenden ohne überall die Seiten Bezeichnung “Kundenlogin” zu erhalten. Trotzdem würde mich sehr interessieren, wieso das nicht funktioniert hat. Etwas an deiesem geändertem Code für die customer.xml, will bei uns wohl nicht so wie es sollte:
War diese Antwort hilfreich?
LikeDislikeSo, nun habe ich in dem von heute neu aufgesetzten Shop das Tutorial selbst durchgeackert.
Ohne Probleme: http://www.demo-store.de/
Mhhh – da ist es für mich schwierig einen Fehler zu finden
Viele Grüße
Johannes Teitge
War diese Antwort hilfreich?
LikeDislikeHabe es noch einmal durchgetestet – es klappt ausgezeichnet!
Man sollte darauf achten, dass man diese reference “right” umbedingt vor der reference “top.links” platziert im Quelltext & dann klappt es nach aktualisiertem Cache auch wunderbar!
Nochmal danke für das Tutorial: http://www.tutorials.golox.eu/
Liebe Grüße – Daniel
War diese Antwort hilfreich?
LikeDislikeHallo, einfaches Tutorial, leider bringt mich nicht weiter…
Habe eine Theme erworben, da gibts überhaupt kein customer.xml in app/design/frontend/default/theme/layout.
In diesem Ordner sind nur catalog.xml, checkout.xml, page.xml und tag.xml. Habe dort gesucht nach und nichts gefunden. Kann mir jemand sagen wie baue ich dieses Box auf andere Weise ein? Vielen Dank und Gruss
War diese Antwort hilfreich?
LikeDislikeHabe dort gesucht nach customer_logged_out
War diese Antwort hilfreich?
LikeDislikeHallo magento-user,
du solltest dich eventuell erst einmal mit den Grundlagen von Magento-Templating auseinandersetzen!
Zu deinem Problem:
Es ist keins, dein gekauftes Template ist nur mit den Dateien ausgestattet die vom Standard abweichen.
Das heißt die customer.xml wird aus dem Verzeichnis
app/design/frontend/default/default/layout bezogen.
Kopiere diese Datei in deinen layout Ordner & treffe dort die im Tutorial gemachten Veränderungen. Genau so verfährst du bei den Template-Files.
Liebe Grüße – Daniel
War diese Antwort hilfreich?
LikeDislike“du solltest dich eventuell erst einmal mit den Grundlagen von Magento-Templating auseinandersetzen”
So eine Antwort habe ich erwartet
Mache ich doch, es braucht halt seine Zeit…
Auf diese Weise klappt es bestens, man lernt viel…
Besten Dank Daniel, macht weiter so
War diese Antwort hilfreich?
LikeDislikeMit aktiviertem Cache funktioniert dann auch die 2. Methode hiervon ohne Probleme. Super!
War diese Antwort hilfreich?
LikeDislikeFunktioniert einwandfrei.
Doch wie kriegt man das Ganze in die Linke Spalte? wenn ich statt right, left eingebe, dann verschwindet die Login box
War diese Antwort hilfreich?
LikeDislikePrüfe mal bitte in der page.xml was du gerade als default Layout verwendest.
Wenn du zum Beispiel “2columns-right.phtml” zugewiesen hast, dann kann es zu keiner Ausgabe auf der linken Seite kommen.
Für die CMS-Seiten zählt das Gleiche, dort kannst du über das Backend verschiedene Layouts zuweisen – z.B. bei “Home”
LG – Daniel
War diese Antwort hilfreich?
LikeDislikeSteht oben bei default.
Und wie weiß ich beim backend das mini login zu?
War diese Antwort hilfreich?
LikeDislikeHmm iwie hat der den code aus meinem kommentar genommen.
Also 3 columns steht bei default oben
War diese Antwort hilfreich?
LikeDislikeFolgendes ist mir aufgefallen: nachdem man die Schnellsuche verwendet, erscheint der Suchbegriff im Mini-Login, sowohl im Namens- als auch im PWFeld.
War diese Antwort hilfreich?
LikeDislikeHallo und danke für diese super Anleitung.
Leider ist auch mir aufgefallen, was nikl bei der Schnellsuche beschreibt.
Ich bin noch absoluter Magento-Neuling, habe aber schon einiges in PHP erschlagen.
Bin leider im absoluten Zeitdruck und habe eine Schnelllösung durch das Auskommentieren oder Löschen folgendem Code in Zeilen 10 und 13 erreicht:
in Datei mxperts.login.phtml
helper(‘catalogSearch’)->getEscapedQueryText() ?>
helper(‘catalogSearch’)->getEscapedQueryText() ?>
für die jeweiligen Value Werte von input id=”logemail” und input id=”logpass”
Bei mir funktioniert es, evtl. hilfts noch jemandem.
Werde bei gelegenheit mal nachlesen, was diese Methode so treibt.
War diese Antwort hilfreich?
LikeDislikeHallo,
kann man die Box ausblenden, wenn man eingeloggt ist? Sonst könnte man den Eindruck bekommen das es mit der Anmeldung nicht geklappt hat.
Danke
Christian
War diese Antwort hilfreich?
LikeDislikeBei mir wird die Box ausgeblendet, wenn ich eingeloggt bin. Anstelle der Anmeldebox würde ich nun gerne die top links in einer Box angezeigt kriegen, an der selben Stelle wäre super. Ich habe die top links auch bereits in einem Block der rechts angezeigt wird (wie man auf der angegebenen Website sehen kann). Wie krieg ich das nun hin?
War diese Antwort hilfreich?
LikeDislikeHabe es schon selbst rausbekommen, wie man den Minilogin durch “Mein Benutzerkonto, Abmelden, Mein Wunschzettel” etc. ersetzen kann, wenn man angemeldet ist.
War diese Antwort hilfreich?
LikeDislikeDanke für das Tutorial.
Zitat: “Die 1. Methode klappt ohne Probleme, aber sobald ich den abgeänderten Code in die customer.xml einfüge, verschwindet die Box wieder.”
Du musst nur in app/design/frontend/dein_shop/default/template/page/html/header.phtml den code getChildHtml(‘mini_login’) ?> zu getChildHtml(‘form_minilogin’) ?> ändern.
Das, was im Tutorial in der customer.xml geändert wurde, kann vielleicht besser in der local.xml gemacht werden.
War diese Antwort hilfreich?
LikeDislike