09.04.2013
Besonders nach dem Testen eines Produktimport kann es sinnvoll sein, alle Produkte aus Magento zu entfernen. Im Magento Backend besteht hierfür die Möglichkeit, dass man alle Produkte (also auch mehr als die 200 maximal sichtbaren Produkte) löscht. Allerdings werden die meisten die Erfahrung gemacht haben, dass diese Funktion ab einer gewißen Anzahl von Produkten nicht mehr funktioniert oder sehr langsam ist. Auch werden hierbei die Produktnummern nicht zurückgesetzt, was zumindest manchmal eine Anforderung des Kunden sein kann. Einfacher und schneller geht das ganze mit einem MySQL-Query (falls MySQL als Datenbank verwendet wird): Dabei werden allerdings nur die Produkte inkl. den jeweiligen Attribut Values gelöscht. Es werden keine Attribute oder Kategorien gelöscht. Falls es anschließend Probleme mit der Indexierung gibt, muss man die Flat Tables einfach einmal manuell per Hand in phpMyAdmin...
14.03.2013
Der Checkout bei Magento gehört wohl zu den fehleranfälligsten Bereichen von Magento. Durch den starken Einsatz von AJAX ist das Debugging für viele Fehler deutlich aufwändiger, als für die restlichen Magento Seiten. Ein typischer Fehler ist, dass die Regionen/Bundesländer nicht angezeigt werden oder diese nicht aktualisiert werden, wenn ein anderes Land ausgewählt wird. Oftmals erscheint auch in der JavaScript Debug Konsole folgende Meldung: Das bedeutet, dass die Variable countryRegions nicht definiert wurde und daher bei einem Länder Wechsel die neue Bundesländer nicht angezeigt werden können. Beheben lässt sich das ganze recht einfach, durch das einfügen von in der onepage.phtml. Diese befindet sich, je nach Template, beispielsweise hier: Wichtig dabei ist, dass man den Codesnippet ganz oben in die Datei einfügt, da bereits in den ersten Zeilen auf die Variable zugegriffen...
19.02.2013
Schriften über die Google Webfonts einzubinden gehört mittlerweile fast zum guten Ton. Es ergeben sich dadurch verschiedene Vorteile: Man hat keine Probleme mit dem Copyright der Schriften. Das Einbinden ist sehr einfach und problemlos Es ist zwar, dank CSS, mittlerweile problemlos möglich die Schriften selbst zu hosten und einzubinden, allerdings darf man sich zu recht die Frage stellen: Warum sollte man sich den Stress antun? Bei über 600 Schriften die bei den Google Webfonts zur Zeit gehostet werden, dürfte sicherlich für fast jeden etwas dabei sein. In Magento ergeben sich mit den Google Webfonts allerdings verschiedene Probleme. CSS Dateien werden normalerweise nur über layout Dateien eingebunden. Das hat in sehr vielen Fällen Vorteile, in diesem Fall gestaltet sich das einbinden der Google Webfonts dann allerdings etwas schwieriger. In Foren hab ich daher bereits gelesen, dass man den CSS Link einfach in die page/html/head.phtml Template Datei einbinden soll. Das ist allerdings nicht sauber und sollte daher nur in Ausnahmefällen gemacht werden. Doch es gibt noch eine andere Möglichkeit – das einbinden über einen core/text Block: Auf diesem Weg ist es auch weiterhin möglich, die CSS Datei nur auf bestimmten Seiten einzubinden. Zum Beispiel wenn man die Schriften nur im Checkout Bereich...
10.02.2013
Eine große Stärke von Magento ist die Flexibilität. Diese Flexibilität wird unter anderem auch von dem Block / Page Konzept gewährleistet. Dadurch ist es möglich bestimmte Content Blöcke auf der Seite immer wieder zu verwenden. Super ausspielen kann Magento diesen Trumpf bei einem Impressum oder den AGB. Das Impressum muss bei einem (deutschen) Shop sehr oft angezeigt werden – ob in den Transaktionsemails oder auf der Webseite. Hier ist es natürlich angenehm, wenn man vVeränderungen nur an einer Stelle im System ausführen muss. Es gibt in Magento verschiedene Möglichkeiten diesen Block dann auf einer Seite oder in einer Email wieder auszugeben. Hier will ich die wichtigsten auflisten. Per PHP Blöcke kann man per PHP direkt im Template ausgeben. Es ist dabei auch möglich den Title und den Content seperat auszugeben. In diesem Beispiel wird der Block mit dem code footer_links ausgegeben. Auf diese Art und Weise wird allerdings nur der Content des Blocks ausgegeben. Um auch den Title auszugeben, sollte man darüber noch folgenden Code einfügen: Durch den Aufruf des Models cms/block kann der Code nicht nur in Templates, sondern auch in Modul Blöcken verwendet werden. Allerdings sollte man versuchen das zu vermeiden, da es kein sauberer Programmierstil ist. In den Template selbst kann man den Aufruf des Models auch durch ein $this ersetzen. Per XML Statische Blöcke können auch mit den Layout XML Dateien auf einer Seite eingebunden werden. Sinnvoll ist das vor allem bei statischen Blöcken, welche fest im Design verankert sind und trotzdem von Admins gepflegt werden sollen. Eingebunden werden die Statischen Blöcke so: Auch in diesem Beispiel muss der Block Code footer_links durch einen anderen...
01.02.2013
Oftmals kriegt man als Entwickler ein Design vorgesetzt, das nicht skalierbar ist. Das Design schreibt also für manche Bereiche eine bestimmte Höhe vor, auch wenn der Content darin mehr Platz bräuchte. Hier bietet es sich dann meistens an den String mit PHP zu kürzen und anschließend auf den vollständigen Text zu verlinken. In Magento gibt es hier auch eine spezielle Funktion, namens truncate. Aufrufen kann man diese Funktion folgendermaßen: Hierbei wird in der Variable $string der auszugebende Content übergeben und via $length die Länge des neuen Strings...
30.01.2013
In Magento Templates ist es ja üblich anstatt relativer Pfade absolute Pfade mithilfe der Methode zu verwenden. Obwohl diese Funktion auch in CMS Pages und CMS Blöcken zur Verfügung steht, wird diese dort kaum verwendet. Spätestens beim nächsten Domain-Umzug oder beim Einsatz eines Content Delivery Networks ist man dann aber froh über den Einsatz dieser Funktion. In den CMS Blöcken und Pages können absolute Pfade zu Bildern mit dem folgenden Code erstellt werden: Um Bilder einzubinden muss also folgender Code eingebunden werden:...
15.01.2013
Magento bietet die Möglichkeit Installationen mit Table Prefix auszuführen. Das bedeutet, dass jede Tabelle vor ihrem eigentlichen Namen einen Prefix im Namen trägt. Damit trotzdem alle Module funktionieren, sollte man beim Programmieren stets darauf achten, dass man Tabellennamen nicht hardcoded in die PHP Dateien schreibt. Hierfür sollte man diese Funktion verwenden:...
11.01.2013
Um tiefgreifende Änderungen in Magento durchführen zu können, muss man manchmal in tiefe Schichten eintauchen. Auch die Config muss man hierfür öfters mal analysieren. Einen ersten Einblick kann man mit folgendem Snippet erhalten: Durch das Einbinden dieses Snippets in einem Template, wird einem die komplett geladene Magento Config angezeigt. Natürlich sollte man diesen Snippet daher nur in Entwicklungsumgebungen einbinden, da in dieser Config beispielsweise auch MySQL-Daten enthalten sind. Durch das Anzeigen der Config kann man leicht überprüfen ob Module wie gewünscht geladen werden und ob die Config Dateien dieser Module auch richtig eingelesen...
13.12.2012
Im Magento Backend gibt es die Möglichkeit für eigene Module auch einen Grid hinzuzufügen, welcher sich perfekt in das System eingliedert. Falls bei dem Grid dann allerdings die Paginierung nicht funktioniert, liest es oft an dem gleichen Problem: Die Collection wird in der setCollection Methode bereits via load() geladen. So sollte es aussehen: protected function _prepareCollection() { $collection = Mage::getModel('supplier/supplier')->getCollection()->addFieldToSelect('*'); $this->setCollection($collection); return parent::_prepareCollection(); } Fehlerhaft: protected function _prepareCollection() { $collection = Mage::getModel('supplier/supplier')->getCollection()->addFieldToSelect('*')->load(); $this->setCollection($collection); return parent::_prepareCollection(); }...
07.11.2012
Plötzlich ist der Magento Online Shop nicht mehr erreichbar und es wird einem nur noch die Fehlermeldung angezeigt? Der Fehler ist, im Vergleich zu vielen anderen Magento Fehlern, sehr aussagekräftig: durch den MySQL Servers wurde dem Shop der Schreibvorgang verwehrt. Bei vielen Webhostern liegt das daran, dass die Größe der MySQL Datenbanken gedeckelt ist. Bei 1&1 zum Beispiel (in diesem konkreten Paket) auf 100MB. Durch die Log-Tabellen, die Magento befüllt, sind diese 100MB schnell aufgebraucht. Am besten sichert man daher die entscheidenden Tabellen zuvor und leert dann die Tabellen. Hierzu benutzt man folgendes MySQL Query:...