Alles rund um Magento!

„Kein Such-Ergebnis“ – häufig unterschätzt

Wir sind von der Google-Suche verwöhnt, dass wir immer ein passendes Ergebnis finden. Von den vielen Online Shops da draußen wird mittlerweile dasselbe erwartet. Kunden die kein zufriedenstellendes Ergebnis angezeigt bekommen sind oft schnell weg. War es früher doch oft der Fall, dass eine leere Seite mit dem Hinweis „Kein Ergebnis zu Ihrer Suchanfrage gefunden“ angezeigt wurde, so hat sich dies heutzutage durch Searchengines wie Solr, Elasticsearch, Sphinx oder auch Suchanbieter wie FACT-Finder oder Findologic wesentlich gebessert.

Suchbegriff “kohle” im oase-teichbau.de Online Shop

Wenn Sie Betreiber eines Magento Online Shops sind und mehrere Stores mit unterschiedlichen Produktgruppen haben, wird sich die Suche in einem Store in der Regel auf das Produktangebot dieses Stores begrenzen. Schade wenn Ihr Kunde gerade nach etwas sucht was Sie in Ihrem zweiten Store auch auf Lager haben. In so einem Fall wird leider auch heute noch zu häufig „Kein Ergebnis gefunden“ angezeigt.

Leider haben wir in der Praxis auch die Erfahrung gemacht dass irgendwelche Suchergebnisse, auch nicht die Lösung des Problems sind. Wenn der Kunde also nach „hosen“ in Ihrem Shop (der leider auf Sanitär ausgelegt ist) sucht und Sie dann Sanitärprodukte präsentieren ist dieser ebenfalls weg.

Bei jedem Suchanbieter oder bei jeder Searchengine steht und fällt eben alles mit der Konfiguration bzw. dem Feintuning der einzelnen Suchanfragen. Zu viele Ergebnisse überfrachten den Kunden, kein Ergebnis macht einen schlechten Eindruck und keine passenden Ergebnisse machen keine Lust weiter zu suchen.

weiterlesen »

Magento – Übersetzungen in Javascript

Magento hat eine eingebaute Übersetzungsfunktion, welche es dem Entwickler erleichtert, Texte wie zum Beispiel für Button und co. für jedes Land, in dem der Shop präsent ist automatisch übersetzen zu lassen. Um eine neue Übersetzung hinzuzufügen sollte man zunächst die Übersetzungsdatei für die gewünschte Sprache erweitern. Die Übersetzungsdatei für deutsch ist unter dem Pfad app/design/frontend/mypackage/mytheme/locale/de_DE/translate.csv zu finden. Übersetzungsdateien sind wie folgt aufgebaut:

1

Sobald die neue Übersetzung hinzugefügt wurde kann man nun in Templates, Blocks, Controller und Helper auf sie zugreifen.

2

In  z.B. einem Model muss man zunächst einen Helper laden, über den man dann den Text übersetzen kann.

3

Wenn man jedoch eine Übersetzung in einer Javascript Datei verwenden will, stößt man auf das Problem, dass man keine dieser Magento Funktionen anwenden kann. Hierfür gibt es das Javascript Objekt Translator, welches Magento mitbringt.

So können Sie eine neue Javascript Übersetzung hinzufügen:

4

In einem Inline Script innerhalb eines Templates ist dies dynamisch möglich.

5

Nachdem die Übersetzung hinzugefügt wurde, können Sie diese beliebig oft verwenden, indem Sie folgenden Code notieren:

6

Möchte man sich den wiederholten Aufruf von Translator.add sparen, kann man in seinem Modul die Datei jstranslator.xml im Ordner etc erstellen (app/code/local/mycompany/mymodule/etc/jstranslator.xml). Diese Datei gibt an, welche Übersetzungen im Javascript verfügbar gemacht werden sollen. Der Inhalt der Datei sieht wie folgt aus:

7

Danach ist es nicht mehr notwendig, die Übersetzung für ‘text to be translated’ per Translator.add hinzuzufügen. Die Übersetzung kann in Javascript wie oben beschrieben ausgelesen werden.

Javascript – Erweitern von blankem Javascript

Javascript bietet eine Menge an nützlichen Funktionen. Bei sehr aufwendigen Anwendungsfällen, wie zum Beispiel bei den meisten Onlineshops werden diese Scripte jedoch schnell so umfangreich, dass kaum einer verstehen kann, welcher Teil des Codes welche Aufgaben übernimmt. Daher ist es sinnvoll bei langen und aufwendigen Codes, einige Aufgaben zusammenzufassen, welche sehr oft gemeinsam genutzt werden. Frameworks wie PrototypeJS und jQuery tun dies, indem sie Funktionen bündeln, um dem Entwickler viel Arbeit zu ersparen und den Quellcode übersichtlicher halten. Oft benötigt man jedoch für sein Projekt kein Framework, welches tausende Funktionen mitbringt und möchte daher eigene Funktionen erstellen. In diesem Beitrag geht es um folgende Möglichkeiten, blankes Javascript zu erweitern:

  • Funktionen
  • Objekte
  • Variablen
  • Frameworks benutzen
  • Blankes Javascript vs PrototypeJS

Funktionen

Funktionen können in internen und externen Javascripts erstellt werden. Jede Funktion hat einen eimaligen Namen und kann nicht überschrieben werden. Nachdem der Compiler des Browsers die Funktion initalisiert hat, ist sie global auf der Webseite sichtbar und kann anhand ihres Namens aufgerufen werden. An Funktionen können Variablen, sogenannte Paramete übergeben werden, welche dann in der Funktion verwendet werden. Außerdem besteht die Möglichkeit, Werte von der Funkion zurückzuliefern. Nutzt man Inline Scripte, welche beispielsweise auf den Klick auf einen Button reagieren, ist es sinnvoll eine Funktion aufzurufen, statt den Code in den HTML Tag zu verstauen.

1

Beim Aufruf der Funktion validate wird die Variable this übergeben, welche die Referenz des Elementes input#username beinhaltet. Die Funktion kann diesen Wert nun nutzen, indem definiert wird, dass der erste Parameter in die Variable input geschrieben wird. Der Name der Variablen ist hier absolut unabhängig von dem Wert oder der Variablen, welche im Funktionsaufruf steht. Er kann frei gewählt werden. Der Parameter ist nur innerhalb der Funktion sichtbar.

2

weiterlesen »

Javascript – Die Grundlagen

Javascript ist einer der wichtigsten Bausteine einer jeden Webseite. Jedoch schreiben nur wenige Entwickler gerne Javascript Code. Dies liegt nicht zuletzt an den verschiedenen Internetbrowsern, welche häufig zu unterschiedlichen Verhaltensweisen desselben Codes führen. Um diese Kompatibilitätsprobleme zu umgehen, greifen viele Programmierer auf Frameworks wie jQuery oder PrototypeJs zurück. Diese Erweiterungen liefern verschiedene Funktionen, die den Programmieralltag sehr vereinfachen können. Jedoch ist es wichtig, die Grundlagen von blankem Javascript, auch Vanilla  Javascript genannt, zu kennen, um Probleme mit diesen Frameworks zu vermeiden oder beheben zu können. Zudem kann Vanilla JS die Performance einer Webseite erhöhen und ist daher teilweise die bessere Wahl. In diesem Artikel werden deshalb folgende grundlegende Themen von Javascript näher betrachtet:

  • Integration von Javascript in Webseiten
  • Zugriff auf HTML Elemente
  • Debugging
  • Modifizierung des Document Object Models (DOM)
  • Einführung in Frameworks

Bevor wir anfangen: Was ist Javascript überhaupt?

Javascript ist eine clientseitige Scriptsprache. Das heißt, sämtlicher Javascript Code wird im Internetbrowser auf dem Computer des Betrachters einer Webseite ausgeführt. Mit Hilfe von Javascript können Webseiten dynamisch gestaltet werden, ihr Aussehen auf bestimmte Ereignisse ändern oder auf Benutzereingaben reagieren, ohne die Seite neu laden zu müssen. Es steht dabei jedoch in keinem direkten Zusammenhang mit der Programmiersprache Java. Javascript ist objektorientiert.

weiterlesen »

Einführung und Grundlagen – SCSS

Themenübersicht

– Was ist Sass / SCSS?
– Wie wird SCSS in ein Projekt eingebunden?
– SCSS – Syntax
– Syntax Unterschiede Sass / SCSS
– SCSS und die Nutzung von Variablen und Mixins
– SCSS Vorteile / Nachteile gegenüber CSS
– Websiten zu diesem Thema

Was ist Sass / SCSS?

Sass (Syntactically Awesome Stylesheets) erschien im Jahr 2007 unter der Gestaltung von Hampton Catlin und der Entwicklung von Natalie Weizenbaum und Chris Eppstein. Sass ist eine Stylesheet Sprache, welche das Schreiben von CSS (Cascading Stylesheets) erleichtert – sie interpretiert den Code und generiert daraus CSS-Code (Präprozessor). Eines der wichtigen Merkmale von Sass ist der objektorientierte Ansatz, welcher hier in Form von “Mixins” auftritt, dazu später mehr.

Neben der Sass-Syntax gibt es auch eine neuere und weiter verbreitete Form die SCSS-Syntax (Sassy CSS). Das verwendete Dateiformat hat die Endung .scss.

weiterlesen »

Wie Services das Dependency Injection Verhalten der Entwickler beeinflusst haben

Spätestens seit der stetig wachsenden Popularität von Unittests, besonders durch PHPUnit, bekam die Auflösung der Abhängigkeiten von Klassen durch Dependency Injection in PHP eine immer größere Rolle im Alltag der Entwickler. Klassen, welche eine oder mehrere Abhängigkeiten zu anderen Klassentypen haben, bekommen diese bei ihrer Erzeugung über den Konstruktor oder zur Laufzeit über Methodenaufrufe übergeben. Dadurch verbessert sich die Wartbarkeit der einzelnen Klassen und Abhängigkeiten lassen sich bei geänderten Anforderungen leichter austauschen. Ebenfalls verbessert sich die Testbarkeit der einzelnen Komponenten, bei der Abhängigkeiten von Klassen durch einfache Test Doubles ersetzt werden können. Ein Nachteil jedoch ist vermehrter Boilerplate Code, wenn an verschiedenen Stellen im Projekt immer die gleichen Objekte erzeugt werden müssen, um die gleichen Abhängigkeiten abzudecken.

Mit den aktuellen PHP-Frameworks wurde der sogenannte Service Locator eingeführt. Die Aufgabe des Service Locator ist die Auflösung und Instantiierung von Abhängigkeiten zu einem Service intern durchzuführen. Dadurch können Objektinstanzen über einen Service erstellt werden, ohne dass dabei der Boilerplate Code zur Auflösung der Abhängigkeiten in der Business Logic hinzugefügt werden muss. Weiterhin sorgt der Service Locator für eine einzige Instanz des aufgerufenen Services innerhalb eines Requests, um unnötige Objekterzeugungen zu vermeiden, ohne dabei die Nachteile eines klassischen Singletons mit sich zu bringen.

Die bequeme Handhabung des Service Locator hat jedoch im Laufe der Zeit die Verwendung von Dependency Injection in Richtungen gelenkt, die zwar technisch schnell umsetzbar sind, aber dessen Sinn nicht ganz folgen. Aus dem Auflösen von Abhängigkeiten wurde ein buntes Zusammenwerfen von Klassen.

weiterlesen »

eval is evil – Stimmt das?

Schon von früh auf wird einem PHP-Programmierer beigebracht, das Sprachkonstrukt eval zu meiden. Dieses führt einen als String übergebenen PHP-Code aus und behandelt diesen wie regulären Code des Projekts. Bereits die PHP-Dokumentation führt aus, dass von der Verwendung dringend abgeraten wird.

Die Gefahr, die in eval steckt, lässt sich sehr einfach darstellen:

< ?php
eval($_POST['textarea_value']);

In diesem Beispiel lässt sich im Formularfeld textarea_value jede versendete Eingabe als PHP-Code ausführen und ermöglicht es einem Angreifer, auf einfache Weise Schaden anzurichten. Natürlich ist die Verwendung und die Gefahr von eval für gewöhnlich nicht so offensichtlich wie in diesem Beispiel, sondern steckt viel mehr in Details, die man als Programmierer übersehen hat. Bevor sich ein Programmierer Gedanken darüber macht, welche Angriffsvektoren in seinem Code durch eval möglich sind und abgefangen werden müssen, lässt er lieber die Finger von dem Sprachkonstrukt. eval is evil.

Aber warum nutzen wir dann Sprachen oder Funktionen, die nicht weniger gefährlich sind? Und wenn eval wirklich so böse ist, wieso wird es in vielen Libraries und Frameworks eingesetzt?

weiterlesen »

Magento – Gutscheine und Aktionen im Warenkorb promoten ohne eine Zeile Code

Wenn Kunden beim Online Shopping Deine Produkte im Warenkorb prüfen, kann ein gut platzierter Gutschein oder Aktionsbanner den entscheidenden Impuls für den Abschluss des Kaufs geben. In der Magento Enterprise Edition lässt sich dies mit Bannern und Warenkorb-Preisregeln realisieren. User der Magento Community Edition benötigen hierfür zusätzliche Module, einige davon findet man in Magento Connect wenn man nach „Promo Banner“ sucht. Dieser Artikel erklärt Dir wie Du die Banner mit der Magento Enterprise Edition realisieren kannst ohne ein Template anzupassen bzw. eine Zeile PHP-Code schreiben zu müssen.

Folgende Schritte sind für die Gutscheine und Aktionen im Warenkorb notwendig:

  1. Einen statischen Block erstellen
  2. Ein neues Widget anlegen
  3. Den Banner hinzufügen
  4. Eine Warenkorbpreisregel definieren
  5. Das Ergebnis prüfen

weiterlesen »

Erstellen und Auslesen eigener internationalisierter Ressourcen

Die Internationalisierung von Webprojekten ist ein Thema, dass in der Entwicklung schon sehr früh bedacht werden sollte. Selbst wenn in einem Projekt anfangs noch keine Pläne dafür vorliegen, ist es nicht gesagt, dass dies immer so bleiben wird.

Glücklicherweise bieten PHP-Frameworks inzwischen Werkzeuge dafür an, jedoch hat sich im Verlauf der Wechsel von Major Releases einiges geändert. Informationen zur Internationalisierung und Lokalisierung sind z.T. aus den Frameworks entfallen. Wo Zend Framework 1 noch mit Zend_Locale, seinen Unterklasse und Data XML-Dateien aufwartete, hat der Nachfolger Zend Framework 2 sich ganz von dem Locale Namespace getrennt. Viele der darin enthaltenen Funktionalitäten konnten nun von der Intl PHP-Extension übernommen werden.

Die Intl PHP-Extension bietet mehrere Klassen und Funktionen an, mit der länderspezifische Formatierungen, Sortierungen und Zeitinformationen umgesetzt werden können und ist somit ein Tool, welches schon seit Langem zu jeder guten PHP Installation dazugehören sollte.

Infomationen zur Verwendung der IntlCalendar-Klasse wurden bereits hier erläutert.

Die Unterschiede der verschiedenen Länder sind jedoch so umfangreich, dass früher oder später der Entwickler einen Punkt erreicht, an dem auch die Intl Extension keine passenden Daten bietet. Oder doch?

weiterlesen »

Conversion Experte Karsten Wesch beim 17. E-Commerce Stammtisch

In Hinblick auf den 17. E-Commerce Stammtisch am kommenden Mittwoch, 03. September 2014, möchten wir Euch heute unseren Referenten Karsten Wesch vorstellen.

Karsten Wesch – Conversion Experte

Flagbit: Hallo Karsten :-)

Stell dich bitte kurz vor: Wie bist du in die Online Marketing Branche und zur Webanalyse gekommen? Wo hast du bisher Erfahrungen gesammelt und was machst du aktuell?

Karsten Wesch: Insgesamt bin ich seit über fünf Jahren im Bereich Digital Analytics tätig. Nach 2,5 Jahren bei der NAVIGON AG hat es mich zur Tchibo GmbH verschlagen. Dort betreute ich die Implementierung und Weiterentwicklung der Webanalyse, sowie AdHoc-Analysen und Conversion-Optimierung mit.

Seit 2012 habe ich mein eigenes Unternehmen, mit dem ich im Juli 2014 in die Selbstständigkeit gegangen bin.

Ich erkläre gerne bildhaft, was ich mache. Kennst du MacGyver? Ich verstehe mich ein bisschen als den MacGyver der Digitalanalyse. Gib‘ mir einen Kaugummi und ich bastel‘ dir drei Handlungsempfehlungen zur Optimierung daraus.

Zusätzlich bin ich ehrenamtlich in der Digital Analytics Group Ressortleiter im Bereich Nachwuchsförderung. Unsere Aufgabe ist es, Neulinge in der Digitalanalyse zu unterstützen und mit dem Basiswissen zu versorgen, das sie für ihre Arbeit brauchen.

weiterlesen »

Page optimized by WP Minify WordPress Plugin