Magento: Alle Modul Rewrites anzeigen

Magento: Alle Modul Rewrites anzeigen

Magento ist durch seine Flexibilität sehr beliebt bei Händlern und Entwicklern. Vor allem das einfache Erweitern und Überschreiben von Models und Blöcken ermöglicht eine vielfältige Modul Landschaft. Durch den vielfältigen Einsatz von Plugins kommt es aber auch immer wieder zu Problemen, wodurch neu installierte Plugins nicht funktionieren. Durch den technischen Aufbau von Magento 1 kann jedes Model nur einmal von einem Standard Plugin überschrieben werden, da die Plugins alle die gleichen Klassen erweitern. Natürlich kann man hier aber händisch nacharbeiten und die jeweiligen Plugin Klassen anpassen. Hierfür muss man allerdings wissen, welche Plugins bereits Core Models oder Blöcke erweitern. Wie bekomme ich eine Liste mit allen Klassen Rewrites? Am einfachsten und ohne zusätzliche Tools geht das mit Magento mit der Mage::getConfig() Methode. Falls man nur die überschriebenen Blöcke oder Models ausgeben will, kann man dieses mit einer Erweiterung des Parameters erreichen. Mit n98-Magerun eine Rewrite Liste erzeugen Etwas einfacher geht das ganze auch mit dem Magento Tool n98-magerun. Das Tool, welches sich selbst als das Schweizer Taschenmesser für Magento bezeichnet, liefert für genau diesen Einsatzzweck eine Funktion mit. Nachdem man die .phar Datei heruntergeladen hat und in das Magento Verzeichnis gelegt hat, kann man sich alle rewrites mit diesem Befehl anzeigen lassen. Durch das eigene Parsen der config Files ist es dem Tool sogar möglich, eventuell bestehende Konflikte zwischen verschiedenen Modulen...
Magento: Seiten auf noindex,nofollow setzen

Magento: Seiten auf noindex,nofollow setzen

Jeder Webshop beinhaltet auch Unterseiten, welche nicht von Google indexiert werden sollen. Das kann die verschiedensten Gründe haben, zum Beispiel dass der Inhalt zwar für den Besucher interessant ist, aber eigentlich nur Duplicate Content ist und in gleicher Form bereits auf der Webseite eines Zulieferers verfügbar ist. Mit Magento hat man die Möglichkeit den meta robots Tag über eine Extension, wie beispielsweise dieser, für jede Seite im Admin Menü zu hinterlegen. Hierfür eine Extension zu installieren ist sinnvoll um ganze Verzeichnisse und Unterseiten mit einem noindex Parameter zu versehen. Noindex in der layout.xml Datei hinterlegen Falls man nur wenige Seiten auf noindex stellen will, ist das einfügen der noindex Anweisungen in der layout.xml Datei ein guter Weg. Mit dem Code wird jede Seite, welche den jeweiligen layout code lädt, auf NOINDEX,FOLLOW gesetzt. Beispielsweise kann man mit diesem Code jede Produkt Unterseite auf noindex stellen. Natürlich ist es möglich auch andere Kombinationen wie NOINDEX,NOFOLLOW oder INDEX,FOLLOW in die jeweiligen Code Snippets einzutragen. Übrigens: Die gleiche Layout Reference kann auch für Title und Description benutzt werden. Im nächsten Codebeispiel wird nicht nur der meta robot Tag gesetzt, sondern auch der Title und die Description verändert. Noindex für CMS Seiten hinterlegen Genauso einfach wie man Layout Anweisungen in der layout.xml Datei verändern kann, kann man diese auch auf Seiten im Magento CMS verändern. Die Anweisungen bleiben dabei komplett die...
?___store Parameter aus Magento urls entfernen

?___store Parameter aus Magento urls entfernen

Man ist gerade dabei den eigenen Magento Shop in mehreren Sprachen verfügbar zu machen und stößt einige Wochen später auf ein großes Problem: der Magento Shop produziert sehr viel Duplicate-Content, welcher von Google liebend gerne indexiert wird. Plötzlich erscheinen viele Seiten im Index, welche den ___store-Parameter beinhalten und dabei unschöne Urls wie http://www.beispielshop.de/?___store=english oder http://www.beispielshop.de/?___store=default erzeugen. Theoretisch kann dadurch jede Produkt-Unterseite mehrfach indexiert werden, was zu Rankingverlusten führen kann. Wie so oft in der Software Entwicklung kann man das Problem auf mehreren Wegen lösen. Lösung 1: Store Parameter als festen Bestandteil in die Url aufnehmen Magento bietet die Möglichkeit einen Shop mit mehreren Sprachen auf einer Domain zu betreiben. Ist die Option aktiviert, wird in den Verzeichnisbaum automatisch der jeweilige Storecode integriert. Die Url für den default Shop würde dann zum Beispiel so ausschauen: http://www.beispielshop.de/default/produkt123.html Die Option ist in der Magento Konfiguration unter System -> Configuration -> Web -> URL Options mit dem Namen Add Shop Code to URLs auffindbar. Steht diese Option auf „Ja“ wird der Url Pfad automatisch erweitert. Falls dieser Lösungsansatz gewählt wird, ist es sinnvoll dem default Shop einen „sprechenden“ Namen zu geben. Der Name des Shops kann in Magento unter System -> Manage Shops angepasst werden. Lösung 2: Das Template modifizieren Bei der zweiten, üblichen Lösung für das Problem passt man das Template an einer Stelle minimal an. Hierzu muss in dem language-switcher Template in der Datei page/switch/languages.phtml folgende Stelle: mit folgender Steller ersetzt werden: Nach der Änderung erstellt Magento die Wechsel Urls ohne den...
Magento: Skin URL, Media URL, Base URL und Store URL in Blöcken verwenden

Magento: Skin URL, Media URL, Base URL und Store URL in Blöcken verwenden

Magento bietet dem Nutzer vielfältige Möglichkeiten, um eine Magento Installation möglichst flexibel zu gestalten. Ein gutes Beispiel hierfür ist die Verlinkung mit URL-Variablen. Mit der Verwendung von URL-Variablen in CMS-Seiten oder Blöcken stimmen die URLs auch nach einer Domain Änderung noch. In Ergänzung zu einem alten Post, hier noch die vollständige Liste mit URL-Variablen in Magento Seiten und Blöcken. Skin Urls Die Skin-Url Variable liefert den Link zu dem gewählten Template zurück, bei welchem die Datei auffindbar ist. Genauso wie bei dem Template Fallback (falls eine Template-Datei nicht verfügbar ist, wird das nächste Template gescannt) verhält es sich hierbei mit Bildern, CSS Dateien oder JavaScript Dateien. Media Urls Um auf ein Bild zu verlinken ist die Media Variable die richtige Wahl. Als Parameter kann man auch hier der Variable einen Pfad mitgeben zu dem jeweiligen Bild. Store Urls Zu guter letzt sollte man auf jeden Fall noch die Store / Base URLs erwähnen. Mithilfe von diesen kann man auf jede beliebige Unterseite verlinken, wie zum Beispiel auf CMS-Seiten. Die Store Url ist hierbei speziell für Multistore Umgebungen hilfreich, wenn unterschiedliche URLs für die Stores...
Magento: Redirect von non-www zu www

Magento: Redirect von non-www zu www

Magento leitet in der Standardkonfiguration alle Requests, welche nicht die korrekte Domain enthalten, auf die Startseite weiter. Dadurch landen Kunden oft auf der Startseite, obwohl Sie eigentlich direkt zu einem bestimmten Produkt oder eine Kategorie kommen wollten. Angenommen ein Shop wurde auf der Domain www.example.com installiert. Ein Nutzer versucht nun die Unterseite „category123“ aufzurufen und vergisst dabei das www in der Domain. Der Nutzer wird http://example.com/category123 aufrufen und Magento wird den Nutzer auf die Startseite der korrekten Url weiterleiten, welche in diesem Fall http://www.example.com ist. Natürlich wäre es deutlich sinnvoller, wenn Magento den Besucher direkt auf die jeweilige Unterseite der korrekten Domain weiterleiten würde. Das Problem lässt sich allerdings mithilfe von .htaccess sehr leicht lösen. Die folgenden Zeilen müssen dazu oben in die .htaccess Datei der Magento Installation kopiert...
Magento: Mehrere Felder zum sortieren einer Collection benutzen

Magento: Mehrere Felder zum sortieren einer Collection benutzen

Bei der Modul-Entwicklung für Magento arbeitet man sehr oft mit Collections. Um diese zu sortieren benutzt man die „setOrder“ Methode der Collection. Mit der selben Methode ist es auch möglich eine Datenbank Abfrage zu schreiben, welche nach 2 Feldern sortiert, indem man die Methode zweimal aufruft. Die SQL-Abfrage sortiert dann zuerst nach dem Feld „created_at“ und anschließend nach dem Feld...
Magento: dbModel read resource does not implement Zend_Db_Adapter_Abstract

Magento: dbModel read resource does not implement Zend_Db_Adapter_Abstract

Oftmals erscheinen bei Magento Fehlermeldungen, welche nicht auf den ersten Blick verständlich sind. Warum erscheint zum Beispiel die folgende Fehlermeldung, ohne dass Dateien geändert wurden? Probleme mit dem Cache In diesem konkreten Fall, wurden die MySQL Zugangsdaten geändert und die alten Zugangsdaten waren noch im Cache hinterlegt. Hier hilft es den Cache via FTP oder PHP zu leeren. Probleme mit Extensions Oftmals tritt der Fehler auch nach der Aktivierung einer Extension auf. Dann hilft es nur in Ausnahmefällen den Cache zu leeren. In diesem Falle würde ich die Extension deaktivieren und anschließend den Cache noch einmal leeren. Falls der Fehler immer noch auftritt, sollte man seine local.xml Datei überprüfen, ob diese noch die korrekten Daten für die Datenbank...
Magento: Besucher der Seite dauerhaft identifizieren

Magento: Besucher der Seite dauerhaft identifizieren

Im E-Commerce ist es sehr einfach die Besucher einer Seite durchgehend zu identifizieren. Dadurch kann man die Aktionen der einzelnen Benutzer aufzeichnen und auswerten. Das gängigste Tool hierfür ist Google Analytics. Aber auch innerhalb des Magento Öko-Systems macht es Sinn, den Besucher einer Seite zu tracken und seine Aktionen aufzuzeichnen. Dadurch kann man beispielsweise die zuletzt angesehenen Artikel prominenter platzieren. Auch wäre es möglich, die Intention des Besuchers anhand vergangener Besuche zu erraten und dem Nutzer die passenden Produkte, Kategorien oder FAQ-Seiten anzeigen. In Magento hat man verschiedene Möglichkeiten einen Nutzer zu identifizieren. Falls der Nutzer sich bereits eingeloggt hat, ist dies am leichtesten über die CustomerId zu erledigen: Da viele Kunden auf Magento Shops allerdings nicht eingeloggt sind (oder sich erst kurz vor dem Kaufvorgang einloggen), muss man auch die Möglichkeit abdecken, dass der Kunde derzeit nicht eingeloggt ist. Ich setze hierfür gewöhnlich die SessionId ein. Diese SessionId wird bei jedem Besucher einer Magento Seite in Form eines Cookies hinterlegt und bleibt identisch, bis der Kunde die Cookies löscht oder die Session abläuft. Wie lange eine Session gültig ist, kann im Magento Backend hinterlegt werden. Um die SessionId abzufragen kann man folgende Methode benutzen: Natürlich kann man die zwei Methoden auch miteinander verknüpfen, um die gespeicherten Daten über den eingeloggten Kunden noch zu...
Magento: aktuelle URL ermitteln

Magento: aktuelle URL ermitteln

Für die Template Entwicklung ist es oft notwendig die aktuelle Url zu ermitteln. Aber auch für viele andere Einsatzzwecke braucht man die Funktion immer wieder. In Magento gibt es eine Vielzahl verschiedener Möglichkeiten die aktuelle Url zu ermitteln und ich will daher nur zwei sehr gängige Möglichkeiten aufzeigen. Es gibt, je nach Spezialfall, aber auf jeden Fall noch weitere, sinnvolle Möglichkeiten. Die gängigste Variante ist, die Url über die Core/Url Helper Klasse aufzurufen. Das sieht dann so aus: Die Url über das Store Objekt aufzurufen ist genauso möglich: Ich benutze eigentlich immer die core/url Helper Klasse. Ich denke, dass ist der einfachste Weg um an die aktuelle Url von Magento zu kommen. Falls ihr nur den aktuellen Pfad der Url benötigt, um diesen mit anderen Werten abzugleichen könnt ihr folgenden Code verwenden. Im Beispiel wird überprüft, ob die aktuelle Url eine Url des Blogs...
Magento: MySQL Debuggen

Magento: MySQL Debuggen

Magento hat zwar ein gutes Debugging System integriert, allerdings kommt es oft zu Problemen mit dem debugging von MySQL-Queries. Diese stellen einen zu langen String da und werden daher in der Fehlermeldung ab einer gewissen Länge einfach gekürzt. Oft kann man dann kaum noch sinnvolle Informationen aus der Fehlermeldung rauslesen, wie Beispielsweise hier: Aus dieser Fehlermeldung kann man zwar rauslesen, dass es ein Problem mit einem Primary Key gibt, nicht allerdings welche Tabelle das betrifft. Zum Glück haben die Magento Entwickler aber genau für diesen Fall vorgebaut und eine separate MySQL Debugging Funktion eingebaut. Diese kann in der Datei /lib/Varien/Db/Adapter/Pdo/Mysql.php aktiviert werden. Hierfür muss in der Zeile 103 (Version 1.7) die Variable $_debug auf true gesetzt werden: In früheren oder späteren Version kann die Zeile vielleicht etwas variieren, die Datei sollte aber bis zur Magento Version 2.0 die gleiche bleiben. Anschließend werden MySQL-Debug Informationen inklusive der kompletten MySQL-Queries in die Datei /var/debug/pdo_mysql.log geschrieben, wodurch man die Probleme besser verstehen und...