Webentwickler Blog

Tipps und Tricks aus der Magento, WordPress und PHP Welt

Tabellennamen in Magento mit Table Prefix ausgeben

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:...

Die Magento Config anzeigen

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...

Webentwickler / PHP Konferenzen 2013

Ein neues Jahr hat angefangen, daher stellt sich auch die Frage: auf welche Konferenzen gehe ich dieses Jahr? Welche waren letztes Jahr gut? Welche Konferenzen waren eher enttäuschend? Da Michael Kliewe letztes Jahr eine super Übersicht zusammen gestellt hat und ich diese sehr gern benutzt habe, habe ich mir dieses Jahr die Mühe gemacht. Ich habe für das Jahr 2013 einen Kalender mit den wichtigsten Konferenzen in Deutschland und Umgebung zusammen gestellt. Wenn eine Konferenz fehlt, dann bitte einfach schnell einen Kommentar hinterlassen. 25-26 Januar 2013 PHP Benelux in Antwerpen 22-23 Februar 2013 PHP UK Conference in London, England 11-14 März 2013 MobileTech Conference in München 19 März 2013 PHPNE Conference in Newcastle upon Tyne, England 19-22 März 2013 Magento Developers Paradise in Kaprun, Österreich 19-20 April 2013 Inspiring Flow (Typo3) in Kolbermoor / Rosenheim 22-26 April 2013 JAX in Mainz 17-18 Mai 2013 PHPDay in Verona, Italien 2-5 Juni 2013 International PHP Conference in Berlin 3-5 Juni 2013 Webinale in Berlin 3-4 Juni 2013 Meet Magento #7.13 in Leipzig 5-7 Juni 2013 Entwicklertage Karlsruhe 6-8 Juni 2013 Dutch PHP Conference in Amsterdam, Holland 24-27 Juni 2013 Web Developer Conference in Nürnberg August 2013 FrOSCon (genauer Termin steht noch nicht fest) 29-30 Oktober 2013 Webtechcon in...

Memcache Cache ohne Neustart des Servers leeren

Nach einem Relaunch oder größeren Änderungen auf einer Seite sollte man in jedem Fall jegliche Caches leeren. Dazu gehört mittlerweile auch oft der Memcache, welcher mit den Magento Bordmitteln an Magento angebunden werden kann. Mit Bash-Zugriff lässt sich der Memcache, ähnlich wie der APC-Cache, sehr leicht leeren. telnet localhost 11211 flush_all...

APC Cache mit PHP leeren

Der APC-Cache einer Seite sollte nach größeren Änderungen (zum Beispiel einem Magento Update, einer Design Änderung oder ähnlichem) umbedingt geleert werden. Das kann entweder direkt über die Bash erfolgen oder über ein kurzes PHP-Skript. Das Skript checkt zuerst ob die Funktion apc_clear_cache verfügbar ist. Falls die Funktion nicht verfügbar ist, wird ein Error ausgegeben. <? if (function_exists('apc_clear_cache')) { if (apc_clear_cache() && apc_clear_cache('user')) { echo 'Cache clear.'; } else { print 'Error'; } } ?> Das Skript sollte man entweder noch über einen GET-Parameter vor fremden Aufrufen schützen oder einen kryptischen Dateinamen verwenden. Am besten ist es allerdings, dass man die Datei erst gar nicht in einem öffentlich aufrufbarem Verzeichnis...

Magento Grid Pagination funktioniert nicht

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(); }...

.svn Ordner rekursiv löschen

Bei jedem SVN-Checkout wird in jedem, von SVN erfassten Ordner, ein .svn Ordner angelegt. Das ist praktisch, solange es sich um eine Entwicklungsumgebung handelt. Falls die Dateien allerdings weitergegeben werden sollen, sind die .svn Ordner meistens eher störend. Im Browser selbst sieht man die .svn Ordner meistens nicht, da diese versteckte Ordner sind. Falls eine weitere SVN Synchronisierung der Dateien nicht mehr erforderlich ist, kann man mit folgendem Befehl die kompletten .svn Ordner und Unterordner des aktuellen Verzeichnisses löschen lassen: find . -type d -name .svn -exec rm -Rf {} \;  Zur Erklärung find . sucht rekursiv nach allen Ordnern und Dateien aus dem Ordner des Aufrufs absteigend. Mithilfe des Parameters -type d werden von find nur Ordner zurückgeliefert. Durch die Übergabe des Parameters -name .svn filtert find auch alle Ordner, welche nicht den Namen .svn besitzen raus. Hier könnte man stattdessen auch *jpg eingeben, um alle Bilder rekursiv zu löschen (Achtung: Dann muss der Type Filter natürlich -type f lauten). Zu guter Letzt wird der -exec Parameter mit dem Löschbefehl...

svn: Could not use external editor to fetch log message

Heute bin ich mit einem nahezu neuen SVN-Server beim commit auf folgendes Problem gestossen: svn: Commit failed (details follow): svn: Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) options svn: None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time configuration option was found Das Problem besagt, dass die Variable für den SVN-Editor nicht gesetzt ist und SVN daher nicht weiß, mit welchem Texteditor der commit log geöffnet werden soll. Mit folgendem Befehl kann man sich die zu commitenden Dateien dann doch anschauen: export SVN_EDITOR=vim...

Magento: INSERT command denied to user ‚user’@’ip‘ for table ‚log_visitor‘

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:...

Magento: Page Titles via JavaScript ändern

Auch wenn man den Title in Magento natürlich eigentlich nur sauber über einen Controller verändern sollte, so gibt es doch Situationen, wo es einfach bequemer und sinnvoller ist, den Title über JavaScript im Template zu ändern. Beispielsweise auch, falls man den Title nur durch User-Interaktion verändern möchte. Damit der Title trotzdem noch den Prefix und Suffix von Magento enthält, muss man diese Variablen mit getStoreConfig abrufen und ebenso einbinden. Bei diesem Beispiel wird der Title durch den Standard Title von Magento ersetzt mit der Variable $newTitle zwischen Prefix und Suffix....

Magento: Cache leeren via FTP oder PHP

Es gibt viele Situationen, wo der Magneto Cache geleert werden muss. Ein gutes Beispiel ist vor oder nach dem Einspielen von Produktdaten in Magento. Durch das leeren des Caches vor dem Import kann man teilweise deutlich höhere Durchsatzraten erzielen. Aber auch nach dem Import macht es Sinn, den HTML-Cache zu leeren. Man kann den Magento Cache sowohl per PHP als auch per FTP / Shell leeren. Magento Cache per PHP leeren Um gleich nach dem Import Vorgang den Cache zu leeren, kann man folgenden Code verwenden. Natürlich kann man per php auch den Image Cache leeren. Dadurch werden alle Thumbnails der Produktbilder gelöscht und beim ersten Aufruf neu erstellt. Wenn man beispielsweise Bilder per FTP austauscht, können so die neuen Thumbnails generiert werden. Magento Cache per FTP oder Shell leeren Den Magento Cache per FTP oder Shell zu leeren klappt nicht bei jeder Magento Installation. Durch den modularen Aufbau von Magento kann der Filecache leicht durch einen Redis oder Memcache Cache ersetzt werden. Falls der Magento Filecache benutzt wird, funktioniert allerdings auch das löschen des Magento Caches per FTP oder Shell einwandfrei. Hierzu wechselt man in das Verzeichnis var/cache/ und löscht alle Unterordner inklusive der jeweiligen Inhalte. In der Linux Shell funktioniert es noch etwas schneller. Einfach im Magento Hauptverzeichnis folgenden Befehl...

MySQL Dump mit Beispieldaten

Oftmals kommt es vor, dass man nicht die komplette Datenbank dumpen will, sondern nur die Struktur und Beispieldaten. Leider ist das mit den Standardtools wie PHPmyAdmin nicht möglich. Allerdings ist für das dumpen von Datenbanken das Konsolentool mysqldump sowieso die bessere Lösung. Und mit diesem Tool lassen sich solche Beispieldaten auch aus der Datenbank herausholen. Um Beispielsweise die ersten 30 Daten jeder Tabelle auszulesen muss man den Parameter an den mysqldump Befehl anhängen. Komplett sieht das ganze dann Beispielsweise so aus Generell empfiehlt es sich mysqldump für das Dumpen von größeren Datenbank zu verwenden, da das Tool, zusätzlich zu dem where Parameter, noch viele weitere Einstellungsmöglichkeiten hat. Diese spielen ihren Vorteil vor allem bei größeren Datenbanken mit Foreign Keys...

Magento 1.5: Testbestellungen und Kunden entfernen

Während der Entwicklung eines Magento Shops werden zwangsläufig einige Testbestellungen gemacht. Damit der Shop bei der Übergabe aber nicht bereits Bestellungen vorweist, sollte man davor die Bestellungen entfernen und die Auto Increment Ids auf 1 setzen. Das geht bei Magento 1.5 nur mit SQL Queries und nicht durch das Löschen der Kunden im Backend. Mit dem unten angehängten SQL Query werden die Kunden und Bestellungen aus einem Magento 1.5.x Shop entfernt und die auto_increment Ids wieder auf 1 gesetzt....

Magento: Alle Produkt Attribute zurücksetzen

Falls man beim Import von Produkten mit mehreren Storeviews arbeitet, kann es vorkommen dass ungewünscht default Werte überschrieben werden. Auch soll es schon vorgekommen sein, dass Mitarbeiter nicht richtig angelernt waren und daher nicht die Standardwerte bearbeitet haben. Da Magento hier keine Möglichkeit bietet, einfach gegenüberzustellen wo Standardeinstellungen überschrieben werden, muss man hier direkt mit der SQL Datenbank arbeiten. Um alle Produkteinstellungen anzuzeigen, welche nicht von den default Werten übernommen werden, werden folgende Querys benutzt: Anschließend sollte man die Ergebnisse der Querys nochmal durchgehen und sich anschauen, ob nicht doch der ein oder andere Eintrag mit Absicht gesetzt worden ist. Falls nicht, kann man alle custom Daten mit folgenden Querys löschen: Zu bemerken wäre noch, dass hierbei allerdings nur Produkteinstellungen gelöscht werden, welche nicht den Standardwerten entsprechen. Die Konfigurationseinstellungen der verschiedenen Storeviews werden hierbei nicht verändert oder...

Magento 1.5 Kategorie Baum öffnet sich nicht in Produktansicht

Nach einem Update auf Magento 1.5 müssen erstmal einige Bugs gefixt werden, um das Produktive Arbeiten wieder zu ermöglichen. Dazu gehört neben dem Geburtstags Validierungs Bug auch der Kategorie Baum in der Produktansicht. In Magento 1.4 ist der Kategorie Baum in der Produktansicht standardmässig aufgeklappt gewesen. Dadurch hat man sofort gesehen, in welchen Kategorien das Produkt ist. Leider hat sich in diese Funktion in der Version 1.5 ein Bug eingeschlichen oder wurde absichtlich entfernt. Um in der Produktansicht wieder sofort einen Überblick über die ausgewählten Kategorie zu bekommen, sind folgende Schritte durchzuführen. Zuerst sollte man eine Sicherungskopie der Datei anlegen. Anschließend wird die ursprüngliche Datei bearbeitet und die getSelectedCategoriesPathIds Funktion mit der gleichnamigen Funktion der Magento Version 1.4 ersetzt: Anschließend sollte der Kategorie Baum in der Produktansicht wieder wie von den vorherigen Versionen gewohnt angezeigt...

Magento 1.5: Problem mit der Geburtstags Validierung

Es wird nicht mit jedem Update immer alles nur besser. Diese Erfahrung machen derzeit auch die Magento User, welche auf die Version 1.5 geupdated haben. In der Version 1.5 existiert unter anderem ein Bug bei der Anmeldung eines neues Benutzerkontos. Durch diesen Bug wird dem Besucher bei der Anmeldung selbst bei einem gültigen Geburtstagsdatum die Fehlermeldung angezeigt, dass kein gültiges Geburtsdatum eingegeben worden ist. Der Fehler existiert allerdings nur, wenn das Geburtsdatum eine führende Null hat. Hier greift dann ein Fehler in der /js/varien/js.js Javascript-Datei. In der Zeile 438 steht in der original Zeile folgender Code: Diese Zeile muss man durch folgende Zeile ersetzen: Anschließend sollte der JavaScript / Css Cache von Magento geleert werden. Dadurch sollte die Benutzerkonto Eröffnung wieder ohne Probleme...

SEO Campixx 2011 Recap

Die SEO Campixx 2011 ist  vorbei und bevor die Erinnerungen verschwinden, wollte ich schnell ein paar Worte dazu niederschreiben. Die SEO Campixx 2011 war alles in allem auch dieses Jahr wieder ein voller Erfolg. Die meisten Vorträge waren, wie auch die letzten Jahre, deutlich werbefreier als bei vielen anderen Konferenzen. Dazu kommt dass die meisten Vortragenden sich wirklich sehr viele Mühe gemacht haben und ihr Thema schön aufbereitet haben. Die in meinen Augen lustigsten/besten Vorträge kamen dieses Jahr von Jens Fauldrath und von dem Gespann BöserSEO und Andre Alpar. Besonders Black Hat Protection war interessant – besonders auch durch die anschließende Diskussion. Ansonsten hat Marco dieses Jahr auch wieder ein super Rahmenprogramm zum Networken auf die Beine gestellt. Und daher ist es nicht verwunderlich, dass es auch dieses Jahr in der Hausbar bis in die frühen Morgenstunden viele Leute aufzufinden waren. Duplicate Content Vortrag Dieses Jahr hab ich mit Stefan Preusler zusammen auch einen Vortrag zum Thema Duplicate Content gehalten. Anhand eines Testprojekts wurde dabei erklärt wie man möglicherweise noch mit DC ranken kann und wie unsere Erfahrungen damit sind. Duplicate Content – SEO-Campixx Vortrag 2011 Was andere schreiben Ausser mir haben auch schon ein paar andere ein Recap geschrieben: Pascal Fantou auf q48.de Projecter SEO-united (mit...