geschrieben von
am 21. Februar 2017 - 19:44
This entry is part 1 of 1 in the series Pestle. This is the first post in the series. Hot on the heels of pestle 1.1, I’ve just released the inevitable pestle 1.1.1. Pestle users should be able to pestle selfupdate and be good to go. Things in this release include An updated, and reorganized command list A magento2:generate:ui:add_to_layout, which adds a uiComponent node to a layout update XML file A magento2:generate:controller_edit_acl command, which changes an admin controller’s configuration ACL rule A magento2:generate:full_module command, which generates a shell script that can generate a “full” module. The magento2:generate:full_module command it probably […]
geschrieben von
am 21. Februar 2017 - 18:06

While PHP production environments have long made use of extra systems like memcache, varnish, and redis, most successful PHP projects also let developers and technically savvy folks drop an archive of files on a server, point the web server at those files, configure the application to point to a traditional RDMS/database, and have a working application.

After a year or so of life with the Magento 2 non-beta-beta, it’s becoming clearer that this isn’t a priority for Magento’s engineering team. The first run experience remains dismal, and the company’s efforts seem focused on tools for Silicon Vally professionals, such as Docker.

For my on work, I’m still installing Magento directly on my OS X/macOS workstation. With out of the box performance of the file based cache being what it is, I’ve started using redis as Magento’s…

geschrieben von Ralf Lieser
am 21. Februar 2017 - 12:44

Omnichannel ganz aus Kundensicht zu gestalten, damit der Kunde nach einem positiven Einkaufserlebnis wiederkommt – das ist das Ziel von Omnichannel-Händlern. Daneben müssen natürlich auch die Verkaufszahlen stimmen und Prozesskosten möglichst niedrig bleiben. All das regelt sich nicht von alleine – sondern bestenfalls mit einer geeigneten Software, wie zum Beispiel dem Magento Commerce Order Management.

The post 5 Einsatzzwecke des Magento Commerce Order Management appeared first on Regalsprecher.

geschrieben von Fabian Schmengler
am 20. Februar 2017 - 16:00
This is my weekly Kata post. Read the first one to learn what it is all about.

Last week: Coin Changer

This week it did not work out for me, I did the kata only once in PHP and that was not enough to get any particular insights. I’ll have to repeat it again some time soon! But on to the next one:

Eighth Kata: Functions Pipeline

The task: build a function pipe() that takes any number of callables as arguments and returns a new callable.
The returned callable passes any arguments to the first callable, then the result of that to the next callable, and so on, and will return the final result.
So the processing order is left to right.

Example:

// first apply strtolower(), then apply ucwords second. $f = pipe('strtolower', 'ucwords'); $f('FOO BAR') === ucwords(strtolower('FOO BAR'));

Optional follow up exercise:

implement a function compose(), which behaves just like pipe()…

geschrieben von Fabian Schmengler
am 20. Februar 2017 - 16:00
Dies ist mein wöchentlicher Kata Post. Lies den ersten um zu erfahren, worum es hier geht.

Letzte Woche: Münzwechsler

Diese Woche hat es bei mir nicht hingehauen, ich habe die Kata nur einmal in PHP gemacht und das war nicht ausreichend für irgendwelche Einsichten. Ich werde sie demnächst noch mal wiederholen müssen. Aber jetzt erst mal zur nächsten:

Achte Kata: Functions Pipeline

Schreibe eine Funktion pipe(), die eine beliebige Zahl von Funktionen (callables) als Argumente akzeptiert und eine neue Funktion zurückgibt.
Die zurückgegebene Funktion übergibt alle Argumente an die erste Funktion, das Ergebnis an die zweite, und so weiter, und gibt das letzte Ergebnis zurück.

Die Funktionen werden also von links nach rechts verarbeitet.

Beispiel: // erst strtolower() anwenden, dann ucwords $f = pipe('strtolower', 'ucwords'); $f('FOO BAR') === ucwords(strtolower('FOO BAR')); Optionale Zusatz-…
geschrieben von Sonja Riesterer
am 17. Februar 2017 - 10:50

In etwa zwei Wochen ist es wieder Zeit für einen der Höhepunkte in unserem Veranstaltungskalender. Nein, damit ist nicht Karneval gemeint, auch wenn wir dafür nach Köln fahren. Stattdessen geht es um die MageUnconference. Wir unterstützen das Event auch in diesem Jahr wieder als Hauptsponsor und werden mit dem gesamten Team vor Ort sein.

Was ist die MageUnconference?

Wie schon in den letzten beiden Jahren treffen sich ein Wochenende lang Magento-Interessierte. Anders als bei einem Hackathon wird nicht programmiert. Anders als bei einer Konferenz gibt es auch keinen vorab geplanten Vortragsplan. Stattdessen werden an beiden Veranstaltungstagen morgens Themen vorgeschlagen, passende Vortragende aus den Teilnehmern erkoren und dann von allen darüber abgestimmt, welche Themen sie am meisten interessieren. Daraus ergibt sich dann der Plan des jeweiligen Tages.

geschrieben von
am 17. Februar 2017 - 1:00

Do you remember how four years ago everything needed to be responsive? Well, in the next two years, the best performing sites are going to be Progressive Web Apps (PWA).

So what makes a site a Progressive Web App?

It’s actually a combination of technologies and approach to implementation that results in a set of qualities. As defined by Google, they are:

  • Progressive - Works for everyone, features enable if they’re compatible with device.
  • Responsive - Caters to a wide range of device sizes.
  • Connectivity independent - Saves content for later to maintain functionality if offline or on poor quality connection
  • App-like - Feels like an app to the user with app-style interactions, navigation and shell.
  • Fresh - Loads in latest content when it can
  • Safe - Everything is over HTTPS for security.
  • Discoverable…
geschrieben von
am 16. Februar 2017 - 17:47

Tangentially Magento related: Magento uses the lusitanian/oauth composer package to handle some oAuth related tasks. In addition to the usual “create the cryptic Authorization: headers” code you’d expect to find in an oAuth library, there’s also these two folders of code

https://github.com/Lusitanian/PHPoAuthLib/tree/master/src/OAuth/OAuth1/Service

https://github.com/Lusitanian/PHPoAuthLib/tree/master/src/OAuth/OAuth2/Service

Each service class listed here attempts to capture each individual oAuth API’s unique take on how to authenticate, authorize, and call an API endpoint for a particular third party service.

Whenever someone like me quips that “oAuth is a tire fire…

geschrieben von Covos
am 16. Februar 2017 - 10:36
Ab Magento Version 1.9 werden die Bestellbestätigungs-eMails nicht mehr per Event verschickt (also nach erfolgreicher Bestellung) sondern über eine Mail-Queue, die über den Cron angestoßen wird. In vielen Fällen wird die Bestellbestätigung also nur alle 15 Minuten verschickt. Ausgerechnet bei … Weiterlesen →
geschrieben von
am 15. Februar 2017 - 23:40

In a typical adminhtml UI Form Component, each individual form element has a corresponding view model object. For text input fields, these view models come from the constructor function returned by the Magento_Ui/js/form/element/abstract RequireJS module.

The view model’s value property, an Knockout observable object, contains the field’s value.

This value property is set with the uiElement’s links feature.

#File: vendor/magento/module-ui/view/base/web/js/form/element/abstract.js defaults: { /* ... */ links: { value: '${ $.provider }:${ $.dataScope }' } }

The links default will set observable values on an object at the time of instantiation by pulling items from the uiRegistry. The above configuration sets the value property. The key it uses to pull values from the uiRegistry is created by the ES6 Template Literal String ${ $.provider }:${ $.dataScope }. The .provider property comes from UI Component…

geschrieben von Fabian Schmengler
am 15. Februar 2017 - 23:03
This is my weekly Kata post. Read the first one to learn what it is all about.

Last week: Roman Numerals

I liked that kata. I started with different approaches that did not work and found a simple one in the end, aided by the tests.

My first tries ended at something like this:


Expected :'IX'
Actual :'VIV'

As soon as it occured to me to treat “IV”, “IX” and so on as single digits, it was dead simple.

When I implemented the reverse, I noticed that it would be easier to check for two character “digits” like “IV” first, then for single characters. Instead of using the same list of (arabic,roman) tupels for both tasks, I decided to explicitly write both as constants $romanDigitsByValue and $romanDigitsByLength. This is a minor duplication of knowledge but I made that sacrifice to make the code more obvious. As long as these…

geschrieben von Fabian Schmengler
am 15. Februar 2017 - 23:03
Dies ist mein wöchentlicher Kata Post. Lies den ersten um zu erfahren, worum es hier geht.

Letzte Woche: Römische Zahlen

Die Kata war aufschlussreich. Ich habe mit verschiedenen Ansätzen begonnen, die nicht funktionierten und fand schließlich, mit Hilfe der richtigen Tests eine einfache Lösung.

Meine ersten Versuche endeten mit Ergebnissen wie diesem:

Expected :'IX'
Actual :'VIV'

Sobald ich auf den Trichter kam, “IV”, “IX” usw. wie einzelne Ziffern zu behandeln, war die Lösung einfach.

Als ich die Umkehrfunktion implementierte, stellte ich fest dass es in dem Fall einfacher ist, zuerst die “Ziffern” mit zwei Zeichen wie “IV” zu prüfen, dann die mit einem Zeichen. Anstatt also die selbe Liste von (arabic,roman) Tupeln für beide Aufgaben zu nutzen und unterschiedlich zu sortieren, entschied ich mich für zwei explizite Konstanten $…

geschrieben von
am 15. Februar 2017 - 20:37
This entry is part 13 of 13 in the series Magento 2 UI Components. Earlier posts include Magento 2: Introducing UI Components, Magento 2: Simplest UI Component, Magento 2: Simplest UI Knockout Component, Magento 2: Simplest XSD Valid UI Component, Magento 2: ES6 Template Literals, Magento 2: uiClass Data Features, Magento 2: UI Component Data Sources, Magento 2: UI Component Retrospective, Observables, uiElement Objects, and Variable Tracking, Magento 2: uiElement Features and Checkout Application, Magento 2: Remaining uiElement Defaults, and Magento 2: Knockout.js Template Primer. This is the most recent post in the series. The quick version: I’ve just released […]
geschrieben von Tim Hahn
am 15. Februar 2017 - 10:01

Überall und zu jeder Zeit einkaufen können – das ist nicht mehr neu, sondern ganz alltäglich und daher ein zentrales Kundenbedürfnis, dem Händler nachgehen müssen. Denn nur, wer diesen Bedürfnissen standhält, wird stabile und wertvolle Kundenbeziehungen aufbauen können. Die Kundenforderung nach vielfältigeren, besser verknüpften Services einerseits und die Hoffnung, den Umsatz zu steigern sowie die

The post 6 Tipps – ganz entspannt den Omnichannel-Commerce meistern appeared first on Regalsprecher.

geschrieben von Ablyakim Ablyalimov
am 14. Februar 2017 - 15:43

Today, I’ll tell you how to simplify management of your product custom options with a shell script. You just need to add a criteria for a product collection, and each option of every product from the collection will be updated automatically. Our script will fetch product collections by product SKU value.

First of all, we need to add a shell script.

<?php require_once 'abstract.php'; class Atwix_Shell_Manage_Options extends Mage_Shell_Abstract { /** * @inheritdoc */ public function run() { } } $shell = new Atwix_Shell_Manage_Options(); $shell->run();

Our script will perform two scenarios – remove and create options with their values.

The “run” method looks the following way:

/** * @inheritdoc */ public function run() { $args = $this->_args; $method = key($args); if ($method == 'add') { $this->…
geschrieben von
am 13. Februar 2017 - 1:00

It's Monday morning, so you check your KPI Dashboards in Google Analytics and Magento. Everything looks ok. Great, you can get on with answering some emails. If there's a ring of truth here, then you're not alone.

Analysing performance of an ecommerce store does not need to be a data-crunching chore. It should be an exciting opportunity to learn something new about your customers and how they use your website. These insights can then be used to take pro-active actions to improve profitability and win the admiration of your colleagues!

Why Measure Performance?

I have yet to find any crystal ball solutions, so the next best thing is to use past performance as an indication of where you are heading, and why. Then add your knowledge, expertise and some gut-feeling to determine the best actions to take to improve on past performance. Simple.

If you don't have an analyst on your team, please don't ignore this vital aspect of running an ecommerce site…

geschrieben von Tom Klingenberg
am 12. Februar 2017 - 2:20

Recent Magento 2 releases and the longer list of fixes demanded a new stable release of Magerun 2.

Jürgen Thelen kindly ported the admin:notifications and design:demo-notice commands, so each time you see the COW warning in the backend there is a relief now. So a warm welcome to Jürgen, we still have PRs from him in the pipe.

More dedicate cron control is available with sys:cron:schedule. Thanks to Pieter Hoste not only for his contributions to Magerun but also for his good work keeping track of Magento 2 upstream issue progress which is easy to get lost with. I really appreciate it, it’s always good to have some feedback when working with the rough edges we see day-to-day with Magento 2.

There is even more. A longer list of fixes (we keep them at the top of the change log), if you run into an issue, file it on Github. Also if you’re interested, grab an issue from the list – preferable one of the bugs – and give it a little love.

geschrieben von Alexander Steireif
am 10. Februar 2017 - 17:32

Am vergangenen Montag und Dienstag war es wieder soweit. In Frankreich haben sich Repräsentanten von Magento, Agentur-Partner, Software-Dienstleister, Entwickler und Freelancer aus ganz Europa sowie den USA in Paris eingefunden, um an der Magento Live France 2017 teilzunehmen. Die Magento Live Eventreihe gehört, im Gegensatz zu der jährlich in Deutschland stattfindenden Meet Magento, zu den

The post Magento Live Paris 2017 – Rück- & Ausblick appeared first on Regalsprecher.

geschrieben von
am 10. Februar 2017 - 0:09

Keeping with UI Component form theme but drawing a wider circle, if you take a look at HTML source of a button on a backend Magento 2 HTML form, you’ll see something like the following

<button id="back" title="Back" type="button" class="action- scalable back" onclick="location.href = 'http://magento-2-1-3.dev/admin/cms/page/index/key/b202205a440f39f9cefe4724da28f8a6b1fa8b255f758f077cd9e8ef3181ca13/';" data-ui-id="back-button"> <button id="save" title="Save Page" type="button" class="action- scalable save primary ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" onclick="location.href = 'http://magento-2-1-3.dev/admin/cms/index/index/key/d82f1d2820123cf3f9144c3f42ce6cbd3ab129d72ff68b9219fd66fc98544c96/';" data-form-role="save" data-ui-id="save-button" role="button" aria-disabled="false">

These buttons were not things…