Alles rund um Magento!

Archive 2010

JavaScript: Gültigkeitsbereich bei eval()

Ja, ich weiß: eval() is evil. Aber um dynamisch nachgeladenen JS-Code auszuführen geht halt kein Weg dran vorbei. Wenn man darin jedoch neue Funktionen definieren will, wird das ganze schnell eklig. Denn wohin (sprich: in welchem Scope) die definiert werden weiß keiner so recht.

Um euch die gleiche mühsame Fehlersuche zu ersparen: Übersicht über die Gültigkeitsbereiche. Fazit ist jedenfalls die Funktionen immer explizit auf window zu definieren:

var myEvalFunc = function() {
eval('window.myAlert= function() {alert(123);};');
};
myEvalFunc();
myAlert();

REST API testen

Um die Vernetzung von (Web-)Applikationen zu ermöglichen sind APIs erforderlich, die den strukturierten Datenaustausch zwischen den Systemen ermöglichen. Dies ist eines der grundlegenden Konzepte des “Web 2.0″.

Die eigene Anwendung mit einem REST API auszustatten ist bei einer Zend-Framework-Anwendung dank Zend_Rest nicht schwer. Will man jedoch auch sicherstellen, dass die API das tut, was sie soll – auch nach einer noch so kleinen Änderung – kommt man um das Testen nicht herum.

Eine Möglichkeit ist hier das http4e-Plugin für Eclipse, das auch Import- und Export in verschiedene Formate erlaubt. Das ist zum Entwickeln und Debuggen einer API sehr komfortabel und angenehm. Bei größeren Projekten wird das ganze dann doch schnell unübersichtlich und nicht jeder will gleich Eclipse installieren um eine REST API zu testen. Die $9 für die Lizenz dürften wohl kaum den Ausschlag geben.

Als Alternative bin ich heute auf soapUI gestoßen. Durch die Baumansicht lassen sich auch größere Projekte übersichtlich verwalten. Die Online-Dokumentation erleichtert einem den Einstieg. Leider hat bei mir (unter Mac OS X) das Paste bei den Parametern nicht funktioniert und das Abtippen einer SHA1-Prüfsumme ist nicht gerade mein Lieblingssport. Welche Features die kostenpflichtige Version mehr bietet hat sich mir auf die Schnelle nicht erschlossen, aber vielleicht funktioniert da ja das das Copy & Paste ;)

Wie testet ihr eure APIs? Die lassen sich ja – im Gegensatz zu irgendwelchen Interna – relativ gut testen.

Update:
Jetzt habe ich noch ein bisschen mir soapUI rumprobiert und festgestellt, dass man damit auch ganze Test-Cases erstellen kann und Bedingungen (XPath, XQuery, Script-Vergleiche, Contains, …) für die Response festlegen kann. Das klingt doch gut :)

Logrotate für Magento

Auch wenn an machen Stellen empfohlen wird, die Logfiles aus Performance-Gründen auszuschalten, halte ich nicht viel davon. Denn wenn einmal ein Fehler nicht reproduzierbar auftritt, erweisen sich die Logfiles oft als der einzige Ansatzpunkt zur Fehlersuche. Auch bei reproduzierbaren Fehlern erlauben die Logfiles Rückschlüsse darauf, wie oft der Fehler in der Vergangenheit aufgetreten ist. Wenn man die Logfiles jedoch einfach so immer weiter wachsen lässt, werden sie immer unübersichtlicher und verbrauchen einfach immer mehr Platz. Mit dem Unix-Tool logrotate kann man Logfiles einfach und bequem per Cronjob komprimieren, kopieren und nach einem konfigurierbaren Zeitraum löschen lassen.

Zunächste muss eine entsprechende Konfiguration angelegt werden. Die Pfadangaben beziehen sich auf Debian Lenny. Als Root am besten eine neue Datei /etc/logrotate.d/magento anlegen, ansonsten bietet sich ~/.logrotate.conf an. Im Beispiel werden im Wochenrhythmus verschoben (weekly) und jeweils 5 Versionen (rotate 5) vorgehalten. Die alten Logfiles automatisch komprimiert (compress).

/srv/www/var/log/exception.log {
        weekly
        rotate 5
        compress
}
/srv/www/var/log/system.log {
        weekly
        rotate 5
        compress
}

Die Konfigurationsdatei in /etc/logrotate.d sollte eigentlich bereits automatisch ausgeführt werden. Für andere Dateien muss noch ein separater Cronjob eingerichtet werden:

2 3 * * * /usr/sbin/logrotate -s ~/.logrotate.status ~/.logrotate.conf

Meet Magento Vortrag: Wie programmiere ich ein Modul?

Wie versprochen hier die Slides vom heutigen Vortrag auf der Meet Magento:

Grüße von der Meet Magento 10-4

Alle Jahre wieder treffen sich Entwickler, Entscheider und Interessierte in Leipzig zur Meet Magento. Da sind wir natürlich dabei und mischen uns unter’s Volk, um die neuesten Informationen und Trends rund um Magento abzugreifen.

Die Keynote hält in Fortsetzung der Tradition wieder Roy Rubin. Viel Neues findet sich in dieser nicht wieder: Magento wächst. Entwickler sind knapp. Magento macht viele Leute reich. Wir haben uns alle lieb. Das füllt jedoch alles keinen Blog-Beitrag.

Eine Sache gefiel mir jedoch in der Keynote: Varien bzw. Magento Inc. alleine konnte den rasanten Aufstieg kaum stemmen. Roys Dank ging dementsprechend an alle Shop-Betreiber, Integratoren, Modulentwickler und sonstigen Mitarbeiter im großen Magento-Zirkus.

Da möchte ich mich anschließen: Vielen Dank an Vinai, Timo, Rico, Damian, Rouven, Alex, Ruben, Jörg, Freddy, Oliver, Allen, Stefan, Nicolai, Helge, Chris, Steffen, Patrick, Jean, Thorsten, (wieso sind das alles Männer?) Josi und last but not least natürlich den Mage::blog()-König David sowie alle, die ich sonst vergessen habe. Ohne Euch würde das alles auf alle Fälle weniger Spaß machen – in diesem Sinne: Weiter so!

Flagbit goes GitHub

Git ist derzeit der hellste Stern am VCS-Himmel. Viele Open-Soure-Projekte nutzen Git inzwischen für ihre Versionsverwaltung. Darunter sind namhafte Projekte wie Android, X.org, Ruby on Rails, der Linux-Kernel und natürlich Git selbst.

Ich stand Git lange Zeit eher skeptisch gegenüber, weil die IDE-Unterstützung eher mager war und auch die Windows-Unterstützung nicht zum Besten bestellt ist. Nachdem Vinai auf dem Foocamp in Herford jedoch so davon geschwärmt hatte und ich mir den Google Tech Talk von Linus Torvalds über Git angesehen hatte, habe ich mir doch mal einen GitHub-Account erstellt um Git nochmal intensiver auszuprobieren.

weiterlesen »

PHP Konsole für Eclipse

Um kurz mal etwas auszuprobieren ist es manchmal praktisch eine interaktive PHP Konsole direkt in der IDE zu haben. Dies kann man bei installiertem CLI PHP schnell und problemlos in Eclipse als “External Tool” einbauen:

Namenskonventionen im Layout-XML

Beim Erstellen von Blöcken über das Layout-XML muss der Parameter name und sollte der Parameter as angegeben werden. Beide erscheinen auf den ersten Blick sehr ähnlich, unterscheiden sich jedoch im Detail:

nameas
Wird mit Punkten getrennt (z. B. catalog.product.teaser), sollte möglichst den vollständigen Namen abbilden.Wird mit Unterstrichen getrennt (z. B. product_teaser), sollte möglichst kurz sein.
Muss global Eindeutig seinMuss Eindeutig sein im Kontext des Eltern-Elements und wird auch in diesem Kontext benutzt ($this->getChildHtml('product_teaser');)

Integration von Magento

Ein Onlineshop kommt selten allein. Deswegen muss er in aller Regel in eine Vielzahl von weiteren Systemen eingebettet werden. Es existieren allerhand Lösungen im Magento Connect, die eine Anbindung an ein bestimmtes System versprechen. Doch worauf muss bei der Integration eigentlich geachtet werden?

Zunächst mal muss spezifiziert werden, welche Systeme angebunden werden sollen und welche Informationen wie oft ausgetauscht werden müssen. Es ist davon auszugehen, dass eine vollständige Übertragung aller Produktinformationen eher selten durchgeführt werden muss; typischerweise werden die Produktinformationen einmal pro Nacht abgeglichen.
Bestellungen hingegen sollten doch häufiger ins Warenwirtschaftssystem übernommen werden, um einen Überblick über die Verfügbarkeit von Produkten für weitere Vertriebskanäle zu behalten.
Ein beispiel für eine Grobspezifikation könnte wie folgt aussehen:

  • stündlicher Export von Bestellinformationen aus Magento in die Warenwirtschaft
  • stündlicher Import von Bestellstatus-Informationen & Rechnungen aus der Warenwirtschaft in Magento
  • stündlicher Import von Lagerbestands- und Preisinformationen aus der Warenwirtschaft
  • Manueller Import von Produktinformationen aus dem Produktinformationssystem
  • Import von Kundeninformationen nach Änderungen im CRM-System (wenn dieses onSave-Trigger zulässt!)

Nachdem geklärt ist, welche Systeme beteiligt sind und welche Informationen wie oft ausgetauscht werden bzw. welche Prozesse miteinander kommunizieren müssen, ist zu prüfen, welche Kommunikationsmöglichkeiten die einzelnen Systeme anbieten (Webservices, RESTful Services, lokale Dateiablage oder Ablage via FTP, SSH, Socket-Kommunikation usw.) und welche Formate sie hierbei nutzen (meist spezifische CSV oder XML-Formate, mitunter aber auch Standards wie BMEcat).
Die meisten vorliegenden Integrationslösungen verstehen unter “Integration” eine reine Datenintegration – Austausch von Daten. Um allen Anforderungen gerecht zu werden, wird mitunter jedoch eine Geschäftsprozessintegration nötig. Als Beispiel sei der Verkauf proprietärer Software über einen Onlineshop genannt: Nach erfolgreichem Abschluss einer Bestellung muss nun der Lizenzserver kontaktiert werden, um dort einen Lizenzschlüssel zu erstellen. Nach erfolgreicher Generierung wiederum erscheint der Schlüssel im Konto des Kunden.

Doch nicht nur die Menge und Art der Systeme ist je nach Unternehmen und Onlineshop unterschiedlich, sondern meist auch die Systeme selbst. Unternehmen haben unterschiedliche Datenobjekte, die Daten der einzelnen Objekte (bspw. Produkte) werden meist um unternehmensspezifische Daten erweitert. Magento trägt dem über das EAV-Attributsystem Rechnung, doch auch die Synchronisation muss hier auf die spezifischen Eigenheiten und Anforderungen des Kunden angepasst werden können. Standardlösungen werden in aller Regel keinen vollends befriedigenden Job machen können.

Magento bietet bereits hervorragende Möglichkeiten, Kunden anzusprechen und den gesamten Onlineshop an die Besonderheiten eines Unternehmens anzupassen. Einer der momentanen Nachteile des Systems ist die unzureichende Anbindung an weitere Systeme. Dataflow reicht für erweiterte Anforderungen schlicht nicht aus, die Magento Web Services API ist in der Regel zu langsam für große Datenmengen und unterstützt keine Geschäftsprozessintegration.

Aus diesem Grund hat Flagbit eine Plattform entwickelt, die Magento um Werkzeuge einer Integration erweitert und genug Raum für spezifische Anpassungen lässt. Es ist in der Regel keine Programmierung von PHP notwendig, sondern ausschließlich Konfiguration über XML, die dem System eine Übersetzung von externen Dialekten in Magento-Sprache ermöglicht. In den kommenden Wochen werden wir die Dokumentation des Systems stark erweitern und anschließend eine Projekt-Webseite anbieten. Mehr dazu in Kürze auf diesem Kanal.

Flattr für die Flagbit Extensions

Seit eben kann man für die kostenlosen Magento-Extensions bequem und einfach mit dem Micro-Payment-Dienst Flattr spenden. Wie es geht? Einfach bei Flattr für die Beta-Phase anmelden, auf die Beta-Einladung warten, Betrag überweisen, monatlichen Betrag festlegen und losflattrn! :)

Folgende Extensions werden von Flagbit derzeit kostenlos angeboten:

« Vorherige Einträge

Page optimized by WP Minify WordPress Plugin