Alles rund um Magento!

Annotations in PHP

So ziemlich jeder ist schon einmal auf die sogenannten Annotations in PHP-Klassen gestoßen: Metadaten zu Methoden oder Properties, welche zur Laufzeit wie von Zauberhand plötzlich Bestandteil von PHP-Code werden können. Besonders bekannt sind die Annotations von phpDocumentor, welche zu einer kleinen Dokumentation des Codes ausgewertet werden können. Die Annotations zu einer Methode sehen bei phpDocumentor zum Beispiel so aus:

class Foo
{
    /**
     * @param mixed $baz
     *
     * @return string
     */
    public function bar($baz)
    {
        return (string) $baz;
    }
}

Nicht nur bei einer Dokumentation ist phpDocumentor hilfreich. Viele IDEs nutzen die in den Annotations hinterlegten Werte der Typen auch um bei der Autovervollständigung die richtigen Methoden oder Properties vorzuschlagen.

weiterlesen »

Locale-Falle mit IntlCalendar::fromDateTime()

Mit PHP 5.5 wurde auch die Extension für die Internationalisierung um neue Klassen erweitert. Eine besonders interessante Erweiterung ist die Klasse IntlCalendar, in der verschiedene neue Funktionen bereitgestellt werden um mit Lokalisierungen von Jahren, Wochen oder Tagen umzugehen zu können. Dabei handelt es sich jedoch nicht um Besonderheiten in der Darstellung von Zeit, sondern mehr um deren Betrachtung. In Deutschland sehen wir den Montag als Anfang der Woche an während es in den USA der Sonntag ist. Ebenso wird dank der Lokalisierung bei der Erstellung eines IntlCalendar-Objekts die Auswahl zwischen gregorianischem und julianischem Kalender abgenommen. Das Ganze funktioniert aber auch nur, wenn die Lokalisierung stimmt.

Zur Erstellung eines Calendar-Objekts bietet die Klasse 2 Factory-Methoden:

Während IntlCalendar::createInstance() den aktuellen Zeitpunkt für Berechnungen zur Verfügung stellt, lässt sich mit IntlCalendar::fromDateTime() aus einem PHP DateTime (alternativ auch ein String) ein IntlCalendar-Objekt erstellen.

// createInstance
$calendar = IntlCalendar::createInstance('Europe/Berlin', 'de_DE');
 
// fromDateTime
$dateTime = new DateTime('25.01.2014', new DateTimeZone('Europe/Berlin'));
$calendar = IntlCalendar::fromDateTime($dateTime);

Da in vielen Projekten DateTime verwendet wird, bietet es sich geradezu an, daraus ein IntlCalendar-Objekt zu erstellen. Wer sich die Factory-Methoden jedoch genau angesehen hat, wird sofort etwas festgestellen: fromDateTime() bietet keine Möglichkeit, eine Locale wie de_DE zu übergeben. Stattdessen wird der Standardwert aus der php.ini verwendet. Sichtbar wird der Fehler dann, wenn zwar die Formatierung über IntlDateFormatter wie die aus dem entsprechenden Land aussieht, jedoch z.B. die Woche mit einem ganz anderen Tag beginnt.

weiterlesen »

Doppelte Rewrites für Models, Blocks und Helper

Magento bietet einen standardisierten Mechanismus an, um Core-Funktionalitäten innerhalb von Kunden-Modulen zu überschreiben, sogenannte Rewrites. Die Definition dessen passiert innerhalb der config.xml innerhalb eines Moduls. Wir haben das hier beispielhaft am Produkt-Modul von Magento durchgeführt.

< ?xml version="1.0"?>
<!-- Pfad ~ app/code/local/Flagbit/MyModule/etc/config.xml -->
<config>
    <modules>
        <flagbit_mymodule>
            <version>1.0.0</version>
        </flagbit_mymodule>
    </modules>
    <global>
        <models>
            <flagbit_mymodule>
                <class>Flagbit_MyModule_Model</class>
            </flagbit_mymodule>
            <catalog>
                <rewrite>
                    <product>Flagbit_MyModule_Model_Product</product>
                </rewrite>
            </catalog>
        </models>
    </global>
</config>

weiterlesen »

Mit uns zur „Zukunft des E-Commerce“: Flagbit bei der Internet World in München

logoAls Goldpartner von Magento und einer der führenden Agenturen und Tongeber der Entwicklerszene sind wir am 25. Und 26. Februar bei der Internet World München, einem der wichtigsten Branchenevents des E-Commerce in Deutschland, ganz vorn mit dabei.

Wir informieren Euch über die neuesten Trends des Onlinehandels, beraten Euch zum Thema Shops und stehen Euch Frage und Antwort für alles, was mit E-Commerce und/oder Magento zu tun hat.

Natürlich könnt uns auch gern besuchen und einfach eine Runde plaudern. Vielleicht seid Ihr auch gerade auf der Suche nach einem neuen spannenden Job?

Dann solltet Ihr erst recht vorbei schauen! Wir suchen immer außergewöhnliche Leute, die Lust darauf haben, bei den Großen mitzuspielen und volle Power zu geben.

Und wo das alles? Auf dem Münchner Messegelände am Stand E230.

Also kommt vorbei, wir freuen uns auf Euch! :)

Track Memory Usage and Runtime of Symfony Commands

If you write lots of Console Commands in your Symfony application you sure want to know more about their memory and time consumption. To collect the necessary data you can make use of the Stopwatch Component:

use Symfony\Component\Stopwatch\Stopwatch;
 
$stopwatch = Stopwatch();
$stopwatch->start('my event');
// do something important
$stopwatchEvent = $stopwatch->stop('my event');
 
echo $stopwatchEvent->getDuration();
echo $stopwatchEvent->getMemory();

First we need to define a service for our Stopwatch in our services.yml to have it available where we want it:

services:
    flagbit_core.stopwatch:
        class: Symfony\Component\Stopwatch\Stopwatch

You could implement the Stopwatch in each and every command by hand but this is tiresome and error-prone. So we make use of the Console Events and attach to them:

    flagbit_core.console_stopwatch.command:
        class: Flagbit\CoreBundle\EventListener\ConsoleStopwatchListener
        arguments: [ "@flagbit_core.stopwatch" ]
        tags:
            - { name: kernel.event_listener, event: console.command }
    flagbit_core.console_stopwatch.terminate:
        class: Flagbit\CoreBundle\EventListener\ConsoleStopwatchListener
        arguments: [ "@flagbit_core.stopwatch" ]
        tags:
            - { name: kernel.event_listener, event: console.terminate }

Ok, let’s walk through the ConsoleStopwatchListener. First we start with the Constructor to inject the Stopwatch into our Service:

<?php
 
namespace Quantum\CoreBundle\EventListener;
 
use Symfony\Component\Console\Event\ConsoleCommandEvent;
use Symfony\Component\Console\Event\ConsoleTerminateEvent;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Stopwatch\Stopwatch;
 
class ConsoleStopwatchListener
{
    /**
     * @var Stopwatch
     */
    private $stopwatch;
 
    /**
     * @param Stopwatch $stopwatch
     */
    public function __construct(Stopwatch $stopwatch)
    {
        $this->stopwatch = $stopwatch;
    }

The console.command Event is dispatched just before command execution. So it is the perfect place to start our Stopwatch:

    /**
     * @param ConsoleCommandEvent $event
     */
    public function onConsoleCommand(ConsoleCommandEvent $event)
    {
        $this->stopwatch->start($event->getCommand()->getName());
    }

The second Event we attached to is console.terminate which is triggered after the command has been executed. So we attach our stats to the Output there:

    /**
     * @param ConsoleTerminateEvent $event
     */
    public function onConsoleTerminate(ConsoleTerminateEvent $event)
    {
        $stopwatchEvent = $this->stopwatch->stop($event->getCommand()->getName());
 
        $output = $event->getOutput();
        if (OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) {
            $output->writeln(
                '<comment>' . $this->formatDuration($stopwatchEvent->getDuration()) . ' / '
                . $this->formatMemory($stopwatchEvent->getMemory()) . '</comment>'
            );
        }
    }
 
    /**
     * @param int $bytes Memory in bytes
     * @return string
     */
    private function formatMemory($bytes)
    {
        return round($bytes / 1000 / 1000, 2) . ' MB';
    }
 
    /**
     * @param int $microseconds Time in microseconds
     * @return string
     */
    private function formatDuration($microseconds)
    {
        return $microseconds / 1000 . ' s';
    }
}

You might also have noticed the Verbosity check which causes our stats only to be printed if the command is run with -v. Symfony >= 2.4 allows to do this a little bit cleaner with $output->isVerbose().

Erste eCommerce-Konferenz an der HS Furtwangen – So war‘s

Wie bereits in den vergangenen Wochen angekündigt, war Flagbit am vergangenen Donnerstag zu Gast bei der ersten eCommerce-Konferenz der Hochschule Furtwangen.

Intention der Veranstaltung war es nicht nur, Studenten näher an das Thema heranzuführen, sondern auch den Austausch zwischen den geladenen Unternehmen aus dem Bereich Online-Handel zu fördern.

eCommerce Konferenz FurtwangenVerschiedene Vorträge führten ab 9 Uhr durch den Tag. Gleich zu Beginn wurde das Magento-Labor vorgestellt, welches derzeit für die Studierenden, die sich in der Vorlesung eShop Design mit dieser Software beschäftigen, realisiert wird. Einige von ihnen präsentierten beispielsweise die Funktionsweise der Konfiguration des Produktkatalogs oder der Verkaufseinstellungen.

Im Anschluss gab es einige interessante Vorträge zum Thema Multi-Channel-Vertrieb und dem Email-Marketing Tool inxmail. Etwas später war dann der Vortrag von Flagbit an der Reihe. Frisch gestärkt und voller Tatendrang nach dem Mittagessen hat Michael Türk den interessierten Anwesenden das Thema Responsive Design näher gebracht.

Auch der Shop und die Erfolgsgeschichte des Unternehmens Mevaco und der Einblick eines Rechtsexperten zum Thema Handhabe bei negativen Kundenbewertungen und den Grenzen beim Einsatz von Google AdWords sowie deren mögliche rechtliche Folgen begeisterten das Publikum.

Fest steht: Die Konferenz war ein großer Erfolg und soll zukünftig in regelmäßigen Abständen stattfinden. Die Nachfrage der Veranstalter an einer erneuten Zusammenarbeit mit Flagbit deutet darauf hin, dass auch wir beim nächsten Mal wieder dabei sind.

 

Relaunch: Der Sanetta-Online Shop erstrahlt in neuem Glanz

Der Name Sanetta steht seit nunmehr 56 Jahren für Baby- und Kindermode in höchster Qualität, mit maximalen Komfort und tollem Design. Besonders beliebt sind die Artikel des Unternehmens aufgrund ihrer Naturbelassenheit. Schadstofffreie Stoffe und Naturmaterialien bieten Allergien und Krankheiten keine Angriffsfläche.

Flagbit hat für Sanetta den kompletten Relaunch des Online Shops mit Magento-Technologie realisiert. Schwerpunkt war dabei unter anderem die bessere Anpassung des Templates an die Corporate Identity. Weiterhin wurde der deutsche Shop um einen separaten österreichischen Partnerstore erweitert. Das neue Design der Shops besticht vor allem durch die Cross-Selling- und Up-Selling-Slider, die dem Besucher einen ersten Überblick über Sanettas umfangreiches Sortiment verschaffen. Aufgrund der steigenden Nutzerzahlen auf Mobilgeräten sind die Shops im sogenannten „Responsive Design“ programmiert und passen sich daher jedem Endgerät optimal an. Dies ermöglicht dem Kunden ein einzigartig unkompliziertes Shoppingerlebnis.

Wir wünschen dem Sanetta-Team viel Erfolg!

Statt Magento Stammtisch: eCommerce-Konferenz eShop-Design in Furtwangen

logo-hfuStatt dem ursprünglich geplanten Magento Stammtisch ist Flagbit am Donnerstag, den 12. Dezember 2013 zu Gast bei der eCommerce-Konferenz eShop-Design an der Hochschule Furtwangen. Seit nun zehn Jahren bietet die Hochschule Furtwangen Lehrveranstaltungen zu E-Commerce sowie Konfiguration und Einrichtung von E-Commerce-Shops mit Magento an.

Schwerpunkt „eShop-Design mit Magento“
Mit dem Kongress richtet sich die Hochschule Furtwangen und besonders die Fakultät für Wirtschaftsinformatik mit aktuellen E-Commerce- und Magento-Themen nicht nur an Studenten, sondern insbesondere auch an Vertreter aus Industrie und Handel.
Für Flagbit wird Michael Türk einen Vortrag zum Thema „Responsive Design“ halten. Insgesamt sind sechs bis acht Fachvorträge zu den verschiedensten E-Commerce-Themen geplant. Die Veranstaltung beginnt um 9 Uhr in der Aula der HS Furtwangen, am Robert-Gerwig-Platz 1, in Furtwangen. Vorbeischauen lohnt sich.

Zum Magento Stammtisch
Der 14. Magento Stammtisch fällt allerdings nicht ins Wasser. Er findet am Donnerstag, den 13. Februar 2014 zur gewohnten Zeit und am gewohnten Platz statt. Wie bereits angekündigt lautet das Thema „Logistik“. Alle wichtigen Informationen werden rechtzeitig im Vorfeld veröffentlicht.

MagentoLive Germany 2013

Am gestrigen Dienstag war es soweit und die Magento Familie kam zur ersten MagentoLive Germany im Westin Grand in München zusammen. Wir von Flagbit waren besonders gespannt auf das Event, schließlich engagierten wir uns als Platinum Sponsor der Veranstaltung. So kam zum ersten Mal unser nagelneuer Messestand im Football-Look zum Einsatz, zudem durften wir in Person von Michael Türk und Sabrina Toth einen Speaker-Slot zum Thema Responsive Design besetzen.

Magento Live Germany 2013 Logo

Los ging es bereits am Montag, schon vor dem Mittagessen wurde zum Aufbruch geläutet und das Team samt Messestand begab sich auf unterschiedlichem Wege nach München. Dass Magento-Experten durchaus auch handwerkliche Fähigkeiten vorweisen können, zeigte sich beim Aufbau des Messestandes in einer absoluten Topzeit. Nun konnte man sich ganz auf das große Hallo sowie die ersten Gespräche mit neuen und altbekannten Gesichtern konzentrieren. Das abendliche Pre-Event fand im Rilano NO.6 im ehrwürdigen Lenbach Palais statt, natürlich eine TOP-Location für das Event.

Der Dienstag startete dann direkt mit verschiedenen Sessions durch, unter anderem durften wir Vinai Kopp und Danny Essner lauschen. Nach dem ersten Networking Break schritt dann Roy Rubin zur Tat und erläuterte die aktuelle Marktsituation rund um Magento. Als Roy das Wort an Jimmy Duvall, Head of Product, abgab, stand auch der erste Auftritt von Michael auf dem Programm. Zum Thema Enterprise 1.13 stellte er das kürzlich gelaunchte Projekt German Dream Nails vor und schilderte, welche Vorteile die Enterprise Edition in diesem Projekt ermöglichte. Nach dem Mittagessen starteten die Breakout-Sessions unter anderem mit Insights von mytheresa.com oder Tim Bezhashvyly zum Thema Mobile.

In der dritten Breakout Session schlug dann die große Stunde von Sabrina und Michael, die dem sehr präsenten Thema Mobile weiteres Leben einhauchten. Im dem Vortrag “Deep Dive into Responsive Design: The benefits of developing responsive design and how to do it right” widmeten sich die beidem unter anderem den statistischen Grundlagen und der Business-Sicht auf Responsive Design. Vor allem standen aber die Erkenntnisse aus unseren bisherigen Responsive Projekten mit dem Schwerpunkt wieder auf German Dream Nails im Vordergrund. Das Ziel war es, aus unseren Erfahrungen und Erkenntnissen Hilfestellungen für erfolgreiche Responsive Design Projekte in der Zukunft zu geben.

Den offiziellen Abschluss bildete in der zweiten General Session Thomas Husson, Vice President bei Forrester, bevor das Event bei ein paar Drinks einen Ausklang fand.

Bedanken dürfen wir uns bei Roy Rubin und dem Magento Team sowie allen weiteren Beteiligten für die tolle Organisation der Veranstaltung, die auch deutlich macht, welch zentralen Stellenwert der deutsche Markt im E-Commerce mittlerweile inne hat. Ein besonderer Dank geht an unseren Kunden German Dream Nails und vor allem Herrn Birger Boethelt für die Unterstützung bei unseren Vorträgen sowie die Präsenz vor Ort.

Zwei frischgebackene Magento Certified Front End Developer in unseren Reihen

Seit letzter Woche haben wir zwei neue Magento Certified Front End Developer in unserem Team. Unsere Magento Entwickler Mike Becker und Fabian König haben mit der Prüfung das offizielle Magento Zertifikat und damit ein aussagekräftiges Gütesiegel erworben.

frontend_developer_01In enger Zusammenarbeit mit den Backend Entwicklern widmen sich die Magento Front End Developer hauptsächlich der Gestaltung des User Interfaces (UI) und der Implementierung neuer Features und Funktionen. Mit dem Erwerb des Front End Developer Certificate haben die beiden ein gründliches Verständnis bei der Magento-Programmierung und Fähigkeiten bei der Bearbeitung des UI nachgewiesen.

Wir möchten beiden auf diesem Wege ganz herzlich zur bestandenen Prüfung und zum Erhalt des Zertifikats gratulieren!

Page optimized by WP Minify WordPress Plugin