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 Vesna Mijatovic
am 10. Februar 2017 - 12:07

Magento often organizes Partner Enablement Events, such as live demos, webinars and quick start trainings. While we participated in a number of such demos and webinars, we’ve never been a part of an on-site training for sales and business development staff aimed at solution and technology partners. This changed last week in France, and here’s our overview of what happened in Paris.

Our Paris adventure started when we received an email in December from Magento’s Amy Schade informing us about the upcoming Magento Quick Start Training (targeted for sales people and Magento new hires) and when we saw her invitation, we decided to add another event to our list.

As a prerequisite, we all had to complete free Quick start pre-learning courses which really helped us to sharpen our Magento skills, fill the gaps and learn a thing or two about new Magento products.

Time passed by really quickly and we…

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…

geschrieben von info@gordonlesti.com (Gordon Lesti)
am 10. Februar 2017 - 0:00
Magento 2 composer dependencies visualized as interactive D3 chord diagram.
geschrieben von
am 9. Februar 2017 - 18:56
Merged Layout schema validation error in Magento 2:

A peek at the complexity deep in Magento 2’s layout rendering engine.

geschrieben von Ivona Namjesnik
am 9. Februar 2017 - 14:17

As we determinedly move through 2017, we decided to look into things which we’re building upon. The old saying goes “If you don’t know history, you are doomed to repeat it.” so we’d like to avoid any mistakes possible by learning from the previous happenings. Here’s what happened in the SEO world in 2016. and what you can do to make those trends work in your favour.

Tea Pisac is one of our consultants. She works as a part of the Inchoo Consulting Group (ICG) which handles various marketing channels for our clients (PPC, SEO, Quality Assurance and User Experience) in order to make their websites work better and their businesses earn more.

She has been with us for…

geschrieben von Andreas von Studnitz
am 9. Februar 2017 - 12:47

Wir haben letzte Woche die gute Nachricht bekommen, dass gleich zwei Teammitglieder als „Magento Master“ ausgewählt worden sind: Fabian Schmengler in der Kategorie „Mentor“ und Sonja Riesterer in der Kategorie „Maker“. Herzlichen Glückwunsch!

Was sind „Magento Masters“?

Es handelt sich um eine offizielle Ehrung von Magento Inc., die Einzelpersonen für besonderes Engagement in der Community auszeichnet. Das kann beispielweise die Vermittlung von Wissen, das Beitragen zur offiziellen Dokumentation, die Organisation von Magento-bezogenen Veranstaltungen, oder das Halten von Vorträgen sein.

Die insgesamt 20 Nominierten werden im April auf der großen Bühne der Magento Imagine in Las Vegas geehrt, zu der sie eingeladen sind.

geschrieben von
am 9. Februar 2017 - 2:39

It surprised me that over a year after Magento 2’s introduction I haven’t had an opportunity to create a new form component using the UI Component system. In the extensions and themes I’ve helped folks port over it made a lot more sense to just convert the old PHP rendered HTML to the new extension. When time is money known technology trumps new, fancy, and undocumented technology.

Having a chance to touch the backend form generation code this week, any doubts I had about my previous approach with clients evaporated. Whether you call it a technology demo or a mess, form components perfectly encapsulate a lot of the the problems Magento developers face with Magento 2’s incomplete rendering layer.

This quickie’s intent is to provide a high level overview of how forms get setup in Magento2 ’s UI Component system. If there are concepts below that confuse you the Magento 2 UI…

geschrieben von Igor Furseev
am 8. Februar 2017 - 15:03

This post is a short inside-out of the newly released Magento 1 SUPEE-9652 security patch. The patch prohibits an injection of executable code to the Magento email “Reply To” param, if the “Return Path” for emails is enabled. So let’s check what it does.

Basically, the patch changes only one file: lib/Zend/Mail/Transport/Sendmail.php, updating the content of the \Zend_Mail_Transport_Sendmail::_sendMail method to:

public function _sendMail() { if ($this->parameters === null) { set_error_handler(array($this, '_handleMailErrors')); $result = mail( $this->recipients, $this->_mail->getSubject(), $this->body, $this->header); restore_error_handler(); } else { if(!is_string($…
geschrieben von
am 7. Februar 2017 - 22:15

For backend UI Components, the rendered x-magento-init JSON argument contains two top level keys: types and components

{ "*": { "Magento_Ui/js/core/app": { "types": {/*...*/}, "components": {/*...*/} } } }

The Magento_Ui/js/core/app module/application uses the data in components to instantiated a nested tree of uiClass based objets and register them as KnockoutJS view models (accessible via Magento’s customer KnockoutJS scope binding). It was never clear to me what the types information was for. I’ve sort of figured that out – or at least enough that I’m not mystified anymore.

In a components object, I came across the following configuration for a UI Component.

"components": { /*...*/ "cms_page_form": { "type": "cms_page_form", "name": "cms_page_form", "children": {...}, "dataScope": "data", "config": { "namespace": "…
geschrieben von Brendan Tull
am 7. Februar 2017 - 22:10
How to Change Magento 2 Increment ID for Orders, Invoices, Credit Memos and Shipments

Some merchants want to customize order numbers or invoice numbers to be different than what Magento 2 produces by default. They might want the numbers to contain more information, or they might have an existing format that shouldn’t be changed. Perhaps the numbers need to pick up where they left off from a previous website (or maybe they just don’t look pretty enough). These numbers each have an Increment ID, and the values used to create them are stored in the database and are not configurable from admin, so we’ll need a little SQL to make our customizations. Without further ado…

We can individually adjust the following properties of increment IDs for Orders, Invoices, Creditmemos, & Shipments:

  • Prefix
  • Suffix
  • Step
  • Start-value
  • Pad-length

The Prefix, Suffix, Start-value, and Step are stored in the…

geschrieben von Tim Hahn
am 7. Februar 2017 - 15:24

Bei Magento tut sich gerade so einiges: Zum einen fördert ein neuer Investor das weltweite Wachstum der E-Commerce-Plattform. Zum anderen ist aus Magento Analytics nun Magento Business Intelligence geworden. Was das im Einzelnen bedeutet? Wir haben die News im Doppelpack zusammengefasst: News 1: Hillhouse Capital investiert in Magento Commerce Um das globale Wachstum und die

The post Magento-News im Doppelpack: Neuer Investor und Business Intelligence appeared first on Regalsprecher.

geschrieben von Stjepan Udovicic
am 7. Februar 2017 - 13:32

Session is something that PHP developers use in their everyday work. But how many of you did took some time to actually consider where are they stored and how does that impact your application? Should you even care? Does number of sessions influence performance of your application?

Setting up the test for file-based sessions

To test this, lets create some code. Keep in mind that same apply to larger applications such us Magento as well, but for the purposes of this article, we will keep it simple:

<?php   // Start profiling $start = microtime(true);   // Set header header('Content-type: text/plain');   // Adjust session config ini_set('session.save_path', __DIR__ . '/sessions/'); ini_set('session.gc_probability', 1); ini_set('session.gc_divisor', 10); ini_set('session.gc_maxlifetime', 3000);   // Init session session_start();   // End profiling $duration = (microtime(true) - $…
geschrieben von Fabian Schmengler
am 7. Februar 2017 - 9:19
This is my weekly Kata post. Read the first one to learn what it is all about.

Last week: Karate Chop

This is going to be a longer post because my goal was to follow the kata description and try out five different approaches. I will explain all of them:

Approach 1: Object oriented PHP

My goal in this approach was to use as little PHP functions as possible and implement the algorithm in an object oriented way

The final solution had the following classes:

interface IntegerHaystack { public function positionOf(int $needle) : int; public function isEmpty() : bool; } class SortedIntegers implements IntegerHaystack { public function __construct(int ...$integers) { ... } ... } class SortedIntegersRange implements IntegerHaystack { public function __construct(SortedIntegers $sortedIntegers, int $indexFrom, int $indexTo) { ... } ... } class…
geschrieben von Fabian Schmengler
am 7. Februar 2017 - 9:19
Dies ist mein wöchentlicher Kata Post. Lies den ersten um zu erfahren, worum es hier geht.

Letzte Woche: Karate Chop

Das wird ein längerer Post, da es mein Ziel war, der Kata Beschreibung zu folgen und fünf verschiedene Ansätze zu probieren. Ich werde alle erklären:

Ansatz 1: Objektorientiert, PHP

Mein Ziel war es hier, so wenig wie mögliche PHP Funktionen zu nutzen und den Algorithmus objektorientiert zu implementieren.

Die finale Lösung hatte die folgenden Klassen:

interface IntegerHaystack { public function positionOf(int $needle) : int; public function isEmpty() : bool; } class SortedIntegers implements IntegerHaystack { public function __construct(int ...$integers) { ... } ... } class SortedIntegersRange implements IntegerHaystack { public function __construct(SortedIntegers $sortedIntegers, int $indexFrom, int $indexTo) { ... } ... } class…