Alles rund um Magento!

Archiv zur KategorieEntwicklung

IPC 2011 – Tag 3

Heute morgen gab es keine Keynote zu verpassen, daher starteten wir direkt mit der Aufforderung von Kore Nordmann und Tobias Schlitt (Qafoo) “Make your project SOLID!”. Die beiden stellten die von Martin C. Fowler (Uncle Bob) geprägten SOLID-Prinzipien vor. Wer Clean Code gelesen hat und sich bereits mit Clean Code Development beschäftigt hat, dürfte wenig Neues erfahren haben. Für alle anderen eine gute Zusammenfassung und Einführung in das Thema.

weiterlesen »

IPC 2011 – Tag 2

Da wir gestern noch bis spät geschäftliche Besprechungen hatten, haben wir die Keynote heute morgen leider verpasst. Wir sind daher pünktlich für den zweiten Kaffee des Tages vor dem zweiten Slot in der Rheingoldhalle angekommen :)

Den ersten Vortrag des Tages bildete somit “Zend Framework 2: State of the Art”. Enrico Zimuel (Zend) gab einen groben Überblick zu den Veränderungen und Neuerungen in ZF2 und zur aktuellen Zeitplanung: eine erste Beta soll noch im Oktober veröffentlicht werden. Das Autoloading in ZF2 wurde grundlegend erweitert. Zwar unterstützt der Autoloader nach wie vor die alte include-path-basierte Methode, zusätzlich kann man Namespaces mit Verzeichnissen verknüpfen woraufhin der Loader Klassen dieser Namespaces direkt aus dem spezifizierten Verzeichnis lädt. Das bringt laut den Zend-Benchmarks mit Opcode-Cache bis zu 40% Performancegewinn. Bis zu 60% schneller ist der Loader mit einer statischen Classmap. Dabei wird das gleiche Prinzip wie bei Arne Blankerts Autoload verwendet. Dependency Injection wird über Container, Interfaces und Setter ermöglicht, die auch über Annotationen konfigurierbar sind. Beispiele dazu finden sich auf Ralph Schindlers Git-Repository. Ebenfalls neu sein wird der EventManager sowie das eventgetriebene MVC-Framework, dass sich auch modular erweitern lassen soll.

weiterlesen »

IPC 2011 – Tag 1

Juhu, es ist wieder so weit: Konferenz! :) Nach viel zu frühem Aufstehen (7 Uhr) ging es heute morgen auf nach Mainz zur IPC 2011. Dort konnte ich beweisen, dass die Android-Navigation den nächsten McDonalds besser findet als angebissenes Obst. Zur Rheingoldhalle konten beide Navigationssysteme gleich gut navigieren.

Auf der Konferenz angekommen gab Johannes Schlüter (Oracle) zunächst ein Update bezüglich PHP 5.4. Dabei wurde unter anderem auf Traits, die neue Array-Syntax und den internen PHP-Dev-Webserver eingegangen. Verbunden war das Ganze mit der eindringlichen Aufforderung die Nightly-Builds zu testen um solche Bugs wie in PHP 5.3.7 und andere zu vermeiden. PHP würde zwar von einer Test-Suite getestet, doch “unbeabsichtigte” (sprich: nicht im Sinne der PHP-Entwickler) Verwendungen von Funktionen würden von dieser Test-Suite eben nicht erfasst, was auch zum aktuellen Problem mit der is_a()-Funktion führe.

weiterlesen »

Hackevening Javascript

Am 29. August hat das Trio von Developers Peak ihre 10 Städte Tournee in Karlsruhe fortgesetzt. An besagtem Abend wurden alle Interessierten zu einem Event mit dem Schwerpunkt JavaScript: Animations: Canvas vs DOM vs CSS3 vs WebGL eingeladen. Im Hotel Residenz in der Nähe des Karlsruher Hauptbahnhofs fanden sich ca. 25 begeisterte Teilnehmer in angenehmer Atmosphäre. Die Vorträge wurden ausnahmslos in Englisch gehalten.

David leitete das Event mit generellen Themen rund um Javascript ein und sorgte dafür, dass für das spätere Pair-Programming keine Basis-Fragen offen blieben. Der Vortrag befasste sich hauptsächlich mit der Interpretation von Javascript Code im Browser und hat sicherlich diejenigen am meisten berührt, die JS Frameworks wie Prototype und JQuery ausgiebig nutzen, aber nicht genau wissen wie der Funktionsumfang implementiert wurde.

David ist massiv auf die Referenzierung von Variablen und Funktionen eingegangen und den damit verbundenen Flaschenhälsen. Ebenso wurden die mächtigen Closures näher gebracht und wie man damit performante Werkzeuge erstellen kann. Zudem wurde erklärt, wie die Bind-Funktionalität in Prototype implementiert wurde (Bind ermöglicht es an jede definierte Funktion einen beliebigen Context zu binden).

Marek hat uns dann im Anschluss in sein Ressort der Animationen geleitet. Es gab einige Showcases und einige generelle Themen, die im Vorfeld diskutiert wurden. Step by Step wurden wir durch die einzelnen Ansätze der Animation mit Javascript geführt, angefangen mit CSS3. Wir haben dann in Pair-Programming Sessions eine Animation in CSS3 mit Fallback auf DOM-Manipulation erstellt. Weiter ging es mit dem Lösungsansatz über das HTML 5 Canvas-Objekt, auch hier haben wir aus einer angedachten Vorlage von Marek gemeinsam eine laufende Animation erstellt. Als letzten Lösungsansatz haben wir uns WebGL gewidmet.

Javascript Animation Mortal Combat

Charakter aus dem Javascript Mortalkombat Clone

Marek und David sind auf die Vorzüge und Nachteile aller Möglichkeiten eingegangen und zum Abschluss gab es noch einige Showcases zu ein paar eigenen Projekten. Zum einen stellte Marek einen vollständig in Javascript geschriebenen Mortalkombat Clone vor. Das Spiel war Multiclient fähig und hat sogar Fights im Mutliplayer ermöglicht. Die serverseitige Implementierung wurde mit einem Aufsatz mit Node JS erstellt. David stellte uns ebenfalls ein Spiel vor, welches 2 Panzer gegeneinander hat antreten lassen. Die herausstechendste Besonderheit daran war, dass David seinen Panzer mit seinem Mobiltelefon ebenfalls über Node JS steuern konnte.

Den letzten Vortrag hat Piotr übernommen und uns eingeladen zu den kommenden Workshops von David und Marek. Piotr hat auch erzählt, welchen Themen sie sich in Zukunft bevorzugt widmen möchten. Im Anschluss an den Event gab es einen regen Interessensaustausch aller Anwesenden, einschliesslich der Gastgeber.

Der Event hat bei mir persönlich definitiv Appetit auf mehr gemacht, besonders die kommenden Workshops von David de Rosier haben mich angesprochen. In den Workshops geht es zum Teil um Objekt Orientierte Programmierung (Mastering Javascript Part 2: OOP und Patterns) und um fortgeschrittene Techniken (Mastering Javascript Part 3: Hardcore JS), welche einem einen sehr tiefen Einblick in die Sprache Javascript gewähren sollten.

Wer sich gerne direkt Code anschauen möchte, kann die Github Accounts von David und Marek besuchen.

 

Leere Kategorien in Navigation

Wir mussten gerade feststellen, dass die Methode getProductCount des Kategorie Models nicht so arbeitet, wie man es von ihr erwartet.

Kurze Problembeschreibung:
Unser Problem bestand darin, dass in der Navigation Kategorien aufgetaucht sind, welche eigentlich keine Produkte enthalten. Es waren z.B. 2 Produkte der Kategorie zugewiesen, aber deaktiviert. Der ProductCount gab trotzdem eine Anzahl von 7 Produkten zurück.

Nach kurzer Analyse mussten wir feststellen, dass Produkte, welche in der gleichen Kategorie, aber in einem anderen Store waren, auch mitgezählt wurden. Ein kurzer Blick auf den Query von Magento hat dann auch schon gereicht, um festzustellen, dass weder die Stores noch die Verfügbarkeit der Produkte eine Rolle spielen.

Wir haben den Query um eine Filterung des aktuellen Stores und um eine Prüfung der Verfügbarkeit der Produkte erweitert. Das wollen wir euch natürlich nicht vorenthalten.

Ihr müsst folgendes Resource Model überschreiben: Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flat

Und hier unsere getProductCount Methode:

public function getProductCount($category)
{
 $productEntityIntTable = (string)Mage::getConfig()->getTablePrefix() . 'catalog_product_entity_int';
 
 $select =  $this->_getReadAdapter()->select()
  ->from(array('p' => $this->getTable('catalog/category_product')), "COUNT(p.product_id)")
  ->joinLeft(array('w' => $this->getTable('catalog/product_website')),'p.product_id = w.product_id')
  ->joinLeft(array('ci' => $this->getTable('cataloginventory/stock_status')),'ci.product_id = p.product_id AND ci.website_id = w.website_id')
  ->joinLeft(array('cpi' => $productEntityIntTable),'cpi.entity_id = p.product_id')
  ->where("p.category_id = ?", $category->getId())
  ->where("w.website_id = ?", Mage::app()->getStore()->getWebsiteId())
  ->where("ci.stock_status = 1")
  ->where("cpi.attribute_id = 84")
  ->where("cpi.value = 1")
  ->group("p.category_id");
 
  return (int) $this->_getReadAdapter()->fetchOne($select);
}

Die “attribute_id” muss noch durch eure ersetzt werden. Es handelt sich hierbei um das “status” Attribut der Produkte mit dem Backend Type “catalog/product_status”.

Attributoptionen schnell über das Magento Backend löschen

Oftmals ist es in Magento nötig, die Attributoptionen zu löschen, gerade bei automatisierten Importen kann dies der Fall sein.
Leider ist es so, dass es sehr mühsam ist für jede Option den Button “löschen” zu betätigen, da es sich auch um mehr als tausend Optionen handeln kann. Ein einfacher schneller Lösungsansatz ist es, das folgende Javascript einfach in er Firebug Konsole auszuführen:

$$('.delete-flag').each(function(item){item.value=1});

Hier noch ein Screenshot, um es verständlicher zu machen:
Magento Screenshot Attribute

Produktkategorien in Magento sinnvoll sortieren

Ein interessante Aufgabe für Verantwortliche eines Online Shops ist es, die vorhandene Produktvielfalt für den Kunden besonders passend und relevant darzustellen.Während der eine Kunde nach besonders günstigen Angeboten sucht, möchte der nächste lieber neuere Artikel angezeigt bekommen. Eine bekannte Möglichkeit dafür ist eine sinnvolle Einteilung der Artikel in unterschiedliche Produktlisten. Diese können dann von den Kunden nach bestimmten Kriterien sortiert werden.

Sortierfunktion im Hein Gericke Shop mit den bekannten Möglichkeiten

In Magento können verschiedene Sortierfunktionen nach Preis, Name oder Artikelnummer konfiguriert werden, die Kunden bestimmte Anhaltspunkte geben. Doch oftmals ist auch gewünscht, dass bereits bei der Standard-Ansicht einer Kategorie eine sinnvolle Reihenfolge vorherrscht und Shopinhaber auch das ein oder andere Produkt pushen können. Dies ist bisher nur durch eine manuelle Konfiguration im Backend möglich, wo bestimmten Artikeln eine Nummer zugewiesen kann, nach der dann sortiert wird.

weiterlesen »

Neue t3n mit Flagbit Performance-Tipps für Magento

Seit dieser Woche ist die neue t3n Nr. 24 erhältlich. Mit dem Thema “Social Business” treten diesmal vor allem Themen rund um die Social Community Facebook in den Vordergrund und bestätigen den Trend der Meet Magento, bei der das Thema Facebook-Commerce ebenfalls bereits sehr stark diskutiert wurde. Interessant ist auch der Artikel von Alexander Steireif vom Magento- und Contao-Dienstleister, der einen Vergleich zwischen Google AdWords und Facebook Ads durchführt. Außerdem ist vor allem für Agenturen und Entwickler der Überblick über verschiedene Quellen von köstlichem Kaffee besonders lesenswert – ein Must-Read. Sehr interessiert wurde intern auch der Start des kleinen Workshops über das Source Code Management System Git aufgenommen.

 

Endlich haben wir es auch mal wieder geschafft, einen eigenen Artikel zur Zeitung beizusteuern. Das Thema brannte uns schon lange unter den Nägeln und wird momentan ständig nachgefragt: Magento-Performance-Optimierung. Da man das nicht in fünf Zeilen abfrühstücken kann, haben wir ein wenig weiter ausgeholt und damit den inoffiziellen Titel “Längster t3n-Artikel aller Zeiten” für uns beansprucht. :)

Dass das Thema aber trotzdem noch nicht zu Ende diskutiert ist, hat man am Andrang bei den Vorträgen der Meet Magento gesehen. Dementsprechend werden wir in nächster Zeit über weitere Features berichten. Ob das wieder in einer zukünftigen Ausgabe von t3n sein wird, wird man sehen müssen (Zielgruppe?). Wir werden euch aber auf alle Fälle hier auf dem Laufenden halten.

Lasst uns doch auch einfach wissen, was ihr von unserem Mammut-Artikel haltet und vor allem, welche Themen euch denn für zukünftige Publikationen interessieren würden.

P.S.: noch eine kurze Anfrage an das t3n-Redaktionsteam. Was muss eigentlich gemacht werden, dass mal wieder ein Technologie-Artikel auf der Titelseite erscheint oder wenigstens angeteasert wird? Wir wissen durchaus, dass diese trockene Materie derzeit nicht so sexy wie Social Media, Web 2.0-Trends oder die neuesten Entwicklungen bei google rüber kommt, dennoch ist es nach wie vor das tägliche Brot von uns Entwicklern und sollte daher unserer Meinung nach auch in einem Magazin wie der t3n wieder stärker in den Mittelpunkt rücken.

FACT-Finder-Features als Magento-Modul verfügbar

Seit Februar ist ein von Flagbit entwickeltes neues Magento-Modul für die Such- und Navigationslösung FACT-Finder verfügbar. Das Modul kann über Magento Connect bezogen und installiert werden. Mit der Extension können Magento-Nutzer derzeit die Fact-Finder-Features Fehlertolerante Suche, Suggest, Automatische Suchoptimierung, After Search Navigation ebenso wie den Campaign Manager in ihren Shop integrieren und auch das FACT-Finder-Management ins Magento-Backend einbinden. Flagbit arbeitet bereits an einer weiteren Version, in der zusätzliche Features ebenfalls kompatibel sind. Weitere Informationen können in einer kürzlich herausgegebenen Pressemitteilung von Flagbit nachgelesen werden.

Cache, Optimizer, DynamicCategories – neue Magento-Module von und mit Flagbit

Endlich haben wir es geschafft und mal wieder ein paar Module veröffentlicht. Diesmal dabei sind die Extensions Flagbit_Cache, Flagbit_Optimizer sowie Firegento_DynamicCategories. Wir haben die Module vorerst in Github geladen, werden das aber auch bald im Magento Connect nachholen. Da muss zunächst noch ein englischer Beschreibungstext verfasst werden.

weiterlesen »

« Vorherige Einträge

Page optimized by WP Minify WordPress Plugin