Magento: Secure Base URL für eigene Controller verwenden

Die Frage tauchte auf Magento.SE auf und es sollte bekannter sein, wie kinderleicht dies eigentlich ist.

Schaut man sich core/Mage/Checkout/etc/config.xml an, kann man sehen, wie Magento für den Checkout definiert, dass die “Secure Base URL” genutzt wird, also HTTPS:

<frontend>
    <secure_url>
        <checkout_onepage>/checkout/onepage</checkout_onepage>
        <checkout_multishipping>/checkout/multishipping</checkout_multishipping>
    </secure_url>
</frontend>

Das ist auch schon alles. Auf die selbe Weise können eigene Controller konfiguriert werden, die sichere Basis-URL zu verwenden. Anschließend wird Mage::getUrl() die sichere URL für die konfigurierten Routen zurückgeben und Requests auf die ungesicherten URLs werden weitergeleitet.

Magento Bündelprodukte: Staffelpreise der einfachen Produkte nutzen

Mage_Bundle_Model_Product_Price.php

Ein Magento-Bug, der seit Jahren immer wieder im Magento-Forum und auf StackOverflow kursiert, ist, dass Staffelpreise mit Bündelprodukten nicht sauber zusammen funktionieren. Mit der Zeit gab es einige Verbesserungen, aber Stand heute (Magento CE 1.9) funktioniert folgendes immer noch nicht:

  • Einzelprodukte mit Staffelpreisen und Qty > 1 im Bündel
  • “Preis wie konfiguriert”-Anzeige in Bündelprodukten mit Staffelpreisen

Es gibt einige Vorschläge im Netz aber mehr Fragen als Antworten, also haben ich eine (hoffentlich) vollständige Lösung erstellt, die ohne Core-Hacks und nur mit einem minimal-invasiven Class Rewrite auskommt. Bis Magento es also selbst in den Griff bekommen hat, kann dieses Modul verwendet werden, um Bundles mit Staffelpreisen zu ermöglichen:

SGH_BundleTierPrices (getestet in Magento CE 1.8 und Magento CE 1.9)

Continue reading “Magento Bündelprodukte: Staffelpreise der einfachen Produkte nutzen”

SVG Bilder in Magento Uploader erlauben

Wer die erlaubten Bilddatei-Typen für Produktbilder in Magento ändern will, wird feststellen, dass sie hart kodiert sind in Mage/Catalog/Model/Product/Attribute/Backend/Media.php und Mage/Adminhtml/controllers/Catalog/Product/GalleryController.php

Ich habe allerdings einen Observer gefunden, mit dem sie zusammen mit anderen Uploader-Konfigurationen angepasst werden können. Dieser Beitrag beschreibt, wie eine Extension für diesen Zweck erstellt werden kann, Grundlagen der Magento Extension-Programmierung werden vorausgesetzt.

Continue reading “SVG Bilder in Magento Uploader erlauben”

Zugriff auf Magento Admin Session aus Frontend

Das nächste mal, wenn ich etwas im Magento Frontend nur für Admin-User zeigen möchte, wird Alan Storms Modul Magento_CrossAreaSessions nützlich sein! Das Thema hat mir in der Vergangenheit schon Kopfschmerzen bereitet. Mehr auf Magento Quickies oder GitHub: Magento_CrossAreaSessions

Hintergrund: Magento trennt adminhtml und frontend Sessions strikt, daher ist es kein trivialer Task, auf einer Frontend-Seite auf die Backend-Session zuzugreifen.

Das Modul erlaubt das Lesen von rohen Session-Daten und Verarbeitung von ACL-Regeln, was für die meisten Fälle ausreichen sollte.

Zertifizierung zum Magento Solution Specialist

Magento Certified Solution SpecialistSeit dem 18.9.2014 darf ich mich nun Magento Certified Solution Specialist nennen. Diese neue Zertifizierung richtet sich hauptsächlich an Berater und Projektmanager und fragt breites Wissen über die Funktionen und Möglichkeiten von Magento ab, sowie Wissen über E-Commerce allgemein.

A Magento Certified Solution Specialist has deep familiarity with the Magento platform, including:

  • Magento Architecture: layouts, themes, extensions and customizations; Magento data models
  • Elements of a Magento ecommerce site: catalog, shipping, payment, order processing, promotions, extensions, import/export, etc.
  • Application of Magento knowledge to business goals: mapping client needs to Magento features, recommending the most effective options for implementing client requirements in Magento

http://www.magentocommerce.com/certification/solution-specialist

Magento-Entwicklung mit Vagrant – Teil 1: Vagrant-Einführung

Vagrant + Magento

Vagrant ist ein Tool, das portable virtuelle Entwicklungsumgebungen ermöglicht. Wenn an verschiedenen Rechnern und/oder von verschiedenen Team-Mitgliedern an einem Projekt gearbeitet wird, ist somit eine einheitliche Umgebung sichergestellt. Die Einrichtung muss nur ein einziges Mal erfolgen und kann beliebig oft reproduziert werden.

Aber es ist auch für einzelne Entwickler interessant, die an unterschiedlichen Projekten arbeiten. Häufig sind z.B. auf den Produktivsystemen unterschiedliche PHP-Versionen installiert, es werden bestimmte Extensions benötigt oder unterschiedliche Systemkonfigurationen. Gerade bei der Entwicklung mit PHP, dessen Verhalten an vielen Stellen von globaler Konfiguration abhängt, gibt es so oft Fehler aufgrund unterschiedlicher Systeme.

Mit Vagrant lässt sich die gesamte Umgebung für jedes Projekt einzeln definieren und auch versionieren (Konfigurationsdateien im Git-Repository). Auch wird das eigene System weniger „vollgemüllt“, mit Software die man für irgendein Projekt mal benötigt hat. Im Idealfall spiegelt die Umgebung das Produktivsystem 1:1 wieder.

Say goodbye to “works on my machine” bugs. – http://docs.vagrantup.com/v2/why-vagrant/

Diese Artikelserie soll insbesondere Magento-Entwickler Schritt für Schritt an Vagrant heranführen, am Ende steht ein Basis-Setup für Magento-Projekte.

Weiterlesen auf integer-net.de

Kostenlose Icons und Online Icon-Generatoren

Du brauchst ein paar Icons für deine (Web) App, aber hast niemanden mit Mad Photoshop Skills™ parat? Diese drei Seiten werden dir helfen:

Iconfinder.net

Meine erste Icon-Ressource im Netz ist www.iconfinder.net, eine sehr große Datenbank von Icons und Icon-Sets in verschiedenen Formaten und Größen. Sie sind unterschiedlich lizensiert, es sind also nicht alle Sets kostenlos aber sogar “frei für den kommerziellen Gebrauch” finden sich etliche. Nach der Art der Lizenz lässt sich auch filtern.

Iconfinder.com Icon Download Database

ICONSDB.com Icon Customizer

Icons DB hat tausende völlig freie, einfarbige und individualisierbare Icons. Wenn du schnell einige einfache, flache Icons benötigst, findest du sie höchstwahrscheinlich hier. Der Clou: Alle können in beliebiger Farbe und Größe als ICO, PNG, GIF, JPG oder ICNS heruntergeladen werden.

Iconsdb.com Online Icon Generator

Iconizer.net Icon Generator

Iconizer ist eine große Icon-Datenbank, sehr ähnlich wie Iconfinder, bietet aber zusätzlich Individualisierbarkeit. So können auch komplexe mehrfarbige Icons fast beliebig in Farbe und Größe angepasst werden.

Iconizer.net Icon Generator

Noch ein Tipp:

Wähle deine Icons mit Bedacht, so dass sie leicht erkennbar sind für die meisten wenn nicht alle deiner Zielgruppe. Auch weitverbreitete Icons wie Ketten für “Link” sind nur für Geeks wie uns selbstverständlich, nicht für den Ottonormalverbraucher.

Ich empfehle diesen Artikel als Denkanstoß: http://stiern.com/articles/usability/usability-in-icons/

Das Magento buyRequest Objekt – eine Referenz

Wer im Zusammenhang mit Bestellungen schon einmal im Magento-Quelltext oder der Datenbank gestöbert hat, dem ist vermutlich der Parameter $buyRequest in vielen Methoden bzw. die in quote items und order items gespeicherte Option info_buyRequest aufgefallen, deren Sinn nicht direkt offensichtlich ist, da scheinbar redundante Informationen enthalten sind. Es gibt dazu auch keine eigene Model-Klasse, es ist einfach ein Varien_Object bzw. in der Datenbank ein serialisiertes Array.

Beispiel:

mysql> select code,value from sales_flat_quote_item_option where option_id=2359;
+-----------------+------------------------------------------------------------------------------------------------------------+
| code            | value                                                                                                      |
+-----------------+------------------------------------------------------------------------------------------------------------+
| info_buyRequest | a:4:{s:4:"uenc";s:140:"[...],,";s:7:"product";s:4:"5000";s:15:"related_product";s:0:"";s:3:"qty";s:1:"1";} |
+-----------------+------------------------------------------------------------------------------------------------------------+

Kurz gefasst: Das $buyRequest Objekt repräsentiert die Kundenanfrage, die durch Klick auf „In den Warenkorb“ zustandekommt, alle weiteren Daten sind von diesem Objekt ableitbar. Es dient sozusagen als Generator für Quote Items. Die minimal notwendigen Daten sind also die Produkt ID (product) und Menge (qty).

Wozu wird das $buyRequest Objekt benötigt?

Es wird zum Beispiel beim hinzufügen eines Produkts zur Merkliste (Wishlist) angelegt, so dass es von dort mit der selben Konfiguration einfach in den Warenkorb gelegt werden kann. Beim „rekonfigurieren“, also dem Bearbeiten eines Items vom Warenkorb aus wird der buyRequest dem Produkt View übergeben, um alle Optionen vorauszuwählen.

Auch für Wiederkehrende Profile (recurring profile) und Nachbestellen (reorder) werden die $buyRequest Objekte „wiederverwendet“, um eine neue Bestellung zu generieren.

Anwendungsfälle

Einige Beispiele, wann man sich mit dem buyRequest beschäftigen sollte:

Continue reading “Das Magento buyRequest Objekt – eine Referenz”

Magento Layout: getChildHtml() mit leerem Ergebnis

Das Problem: Mysteriöserweise liefert getChildHtml() im Template ein leeres Ergebnis, obwohl die Kind-Blöcke offenbar erzeugt wurden.

Die Lösung: Blöcke im Magento-Layout sollten immer einen Namen haben. Ohne name-Attribut werden sie zwar angezeigt, Unter-Elemente können ihnen aber nicht zugeordnet werden und bleiben “verwaist”.

Verantwortlich ist die Methode Mage_Core_Model_Layout::_generateBlock(). Wie man sieht, wird der Parent Block nur zugewiesen, wenn er einen Namen hat:

            $parentName = $parent->getBlockName();
            if (!empty($parentName)) {
                $parentBlock = $this->getBlock($parentName);
            }

Man beachte, dass $parent hier ein XML-Knoten ist und kein Block-Objekt. Es hilft also nichts, dass Blöcke ohne Namen automatisch einen Namen wie ANONYMOUS_1 erhalten. Die Zuordnung geschieht über das name-Attribut des Knotens, so dass sie gleichermaßen für <block> wie für <reference> Knoten funktioniert.

Farbpaletten-Tools (nicht nur) für Gelegenheits-Designer

Wer ab und zu ein einfaches Design auf die Beine stellen muss, ohne von Dingen wie Farbenlehre viel Ahnung zu haben, braucht sich deshalb noch lange nicht ins farbige Fettnäpfchen zu setzen. Hier drei Ressourcen für harmonische Farbpaletten:

1. Paletton

Einfach die Punkte im Farbenrad mit der Maus ziehen und live eine passende Palette erhalten, inklusive Vorschau, wie die Farben als Webseite wirken. Presets für Helligkeit und Sättigung wie “Pastel”, “Shiny” oder “Dark” sind nützlich als Startpunkt,

Link: http://paletton.com

Paletton.com Farbpaletten-Generator Screenshot Continue reading “Farbpaletten-Tools (nicht nur) für Gelegenheits-Designer”