geschrieben von
am 2. Dezember 2016 - 1:00

Bringing new version of your code base may be an annoying job for you and your team if you don't have a specialist DevOps in your team. To ensure you process your deployment every time with same procedure, you could use a specific tool for that job. Especially after some Magento-Core updates it is a good way to deploy your code with one of these tools.

why using a deployment tool?

There are a lot of deployment tools in the wild. Some automate more or less than others, most use different programming languages, some need a root-server to deploy to other machines. Big benefit of these tools are speed, consistency, rollbacks and sometime parallel deployments. If you are working as team on a projects, you can guarantee that everyone deploys code the same way.

why deployer.org?

I decided to use deployer as this tool come in our native…

geschrieben von Tom Klingenberg
am 1. Dezember 2016 - 11:41

Long time no stable releases, Magerun 2 Version 1.3.0 opens up a new release cycle incorporating more and more stability fixes and improved commands for the new Magento platform.

This ones coming from SymfonyCon which reminded us for the upcoming cloud based setups we need to ship new features for which we need to ship the current version first.

We recommend to upgrade the version for everyone. Magento 2 is still an emerging field and Magerun still has some rough corners. So stay current.

Extract from Changelog.md
  • Fix: Fatal error when running Magerun 2 inside a Magento 1 tree (by Tom KLingenberg, #253)
  • Fix: Add missing areas to the observer list (by Pieter Hoste, #249)
  • Fix: Do not drop all sales_order_status* tables (report by Brent Jameson, fix by Tom KLingenberg, #239)
  • Fix: Prevent Mysql deadlock on admin password change (by Tom KLingenberg, #242)
  • New: Add Magento CE 2.1.2 (by Raul E Watson, #252)
  • New: Debug output on –…
geschrieben von
am 1. Dezember 2016 - 1:00

I'm really glad to open this 2016 Advent Blog. For sure, like me, you were probably confrontated to the question of the performance of your Magento project. In fact, it's definitely a common topic for all of us.

How many times, I had to explain to my customers why their shop is slow after they have been installed by their previous agency or newbie developer a 70 USD Template slowing down the whole shop. It's cheaper and even better to use the standard RWD template of Magento instead to use those multi-purpose templates. You will hear from your customer: "I don't like this template!", "ok, why not!" you will answer. But hey, the core is good enough to make something which fits to the taste of your customer and the effort is definitely the same as buying a template, fixing all the issues and customizing it for your customer.

Of course, let's be fair, it's not only those kind of templates, to not say crappy templates, which may have an impact on the…

geschrieben von
am 30. November 2016 - 23:46
@api coverage for Magento 2 Javascript:

According to this forum thread from one of Magento 2’s architects, it sounds like Magento 2.2 is going to bring @api style coverage to Magento’s RequireJS module. This is a positive step in that it will clarify which javascript functions we can rely on working version to version. This is an uncertain sign in that Magento’s core engineering team don’t have the best track record in understand what third party developers actually need. Tentatively hopeful though.

geschrieben von Covos
am 29. November 2016 - 17:06
Super ärgerlich und nervig aber mittlerweile häufiger vorgekommen: Bei der Extension Login und Bezahlen mit Amazon von Creativestyle fiel auf, dass Einstellungen, die man als Admin im Backend vornimmt nicht abgespeichert werden. Es gibt zwar jedes Mal eine nachricht „Die … Weiterlesen →
geschrieben von netz98
am 29. November 2016 - 7:16

Im letzten Beitrag zum Brand- und Performance-Marketing im E-Commerce ging es um die Basics, also Strategie, richtiges Set-Up des Onlinehsops und die Auswahl der passenden Kanäle. In Teil 2 erklärt Dominik Heck von add2, wie die Performance gemessen wird und wie sie sich weiter steigern lässt, hin zu einem 360° Digital Marketing.   Wie wird der

The post Vom Performance-Marketing im Ecommerce zum 360° Digital Marketing: Teil 2 appeared first on Regalsprecher.

geschrieben von
am 29. November 2016 - 3:24
This entry is part 11 of 11 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, and Magento 2: uiElement Features and Checkout Application. This is the most recent post in the series. This one’s another meta/link post. As part of researching the new UiElement Internals series, I ended […]
geschrieben von
am 29. November 2016 - 3:09

Wrapping up our uiElement defaults, we have the registerNodes defaults

#File: vendor/magento/module-ui/view/base/web/js/lib/core/element/element.js defaults:{ /* ... */ registerNodes: true, /* ... */ }

This is another node that you don’t need to worry too much about. Magento uses this to identify the uiElement objects in the Magento_Ui/js/lib/knockout/extender/bound-nodes extension.

The Magento_Ui/js/lib/knockout/extender/bound-nodes RequireJS module is included as a dependency in the Knockout.js bootstrap module. It’s initial loading will wrap the ko.applyBindings and ko.cleanNode method with some custom code that (appears to) store certain bound nodes and view models in a javascript WeakMap. However, if the passed in view model does not contain the registerNodes flag, then Magento skips adding it

#File: vendor/magento/module-ui/view/base/web/js/lib/knockout/extender/bound-nodes.js if (data && data.registerNodes…
geschrieben von
am 29. November 2016 - 2:27

Two defaults you don’t need to worry too much about are the containers and _requested defaults.

#File: vendor/magento/module-ui/view/base/web/js/lib/core/element/element.js defaults: { _requesetd: {}, containers: [], /* ... */ }

These are just properties that Magento’s initializing using the uiElement’s defaults feature. They confer no magic abilities on your objects.

Magento uses the .containers property to store the parent element of specific uiElement object. You’ll recall from the UI Component series that a UI Component is basically a tree of nested Knockout.js view models. When one uiElement object is injected into another, Magento calls the element’s initContainer method

#File: vendor/magento/module-ui/view/base/web/js/lib/core/element/element.js /** * Called when current element was injected to another component. * * @param {Object}…
geschrieben von
am 29. November 2016 - 2:07

The name and ns defaults

#File: vendor/magento/module-ui/view/base/web/js/lib/core/element/element.js defaults: { /* ... */ name: '', ns: '${ $.name.split(".")[0] }', /* ... */ }

are another pair of defaults that don’t make a lot of sense in the context of a traditional programming object system. Like the provider default, the name default is most often set by the Magento_Ui/js/core/renderer/layout module from server side rendered JSON.

#File: vendor/magento/module-ui/view/base/web/js/core/renderer/layout.js function initComponent(node, Constr) { var component = new Constr(_.omit(node, 'children')); registry.set(node.name, component); }

For the full details of how this works you’ll need to work your way through the…

geschrieben von
am 28. November 2016 - 23:21

The next two defaults we’ll blitz through are the provider and source defaults.

#File: vendor/magento/module-ui/view/base/web/js/lib/core/element/element.js defaults:{ /* ... */ provider: '', /* ... */ source: null, /* ... */ }

We’re starting to get into the defaults that are tricky to understand since they involve both a server side component, and are effected by things that happen in the Magento_Ui/js/core/app and Magento_Ui/js/core/renderer/layout modules.

First, lets focus strictly on the javascript side. When you instantiate a uiElement based object, Magento calls the following method

#File: vendor/magento/module-ui/view/base/web/js/lib/core/element/element.js initModules: function () { _.each(this.modules, function (name, property) { if (name) { this[property] = this.requestModule(name); } }, this); if (!_.isFunction(this.source)) { this.source = registry.…
geschrieben von
am 28. November 2016 - 21:15

The next uiElement default we’re going to talk about is the statefull default. Before we begin, let us bask is the programmer’s glory of the misspelling of “stateful” making it into a production release.

The statefull default allows you to create a uiElement object with properties that will be automatically persisted into the localStorage, via the localStorage abstraction we discussed in our previous post.

Let’s start with the code – run this from your javascript console on a Magento bootstrapped page.

UiElement = requirejs('uiElement'); OurConstructorFunction = UiElement.extend({ 'defaults':{ 'name':'aUniqueNameForTheUiElement', 'tracks':{ foo:true }, 'statefull':{ foo:true } } }); object = new…
geschrieben von
am 28. November 2016 - 19:35

Earlier, we described the modules defaults for Magento uiElement javascript constructor functions. If you look at the uiElement definition, you’ll see there’s one modules default already configured for all uiElements

#File: vendor/magento/module-ui/view/base/web/js/lib/core/element/element.js modules: { storage: '${ $.storageConfig.provider }' }

This storage default reaches into the instantiated object’s storageConfig.provider to pull out a uiRegistry key. (see the ES6 Template Literals article if you’re not familiar with the syntax). This storageConfig is another uiElement defaults

#File: vendor/magento/module-ui/view/base/web/js/lib/core/element/element.js storageConfig: { provider: 'localStorage', namespace: '${ $.name }', path…
geschrieben von Ashlee Colliver
am 28. November 2016 - 17:36

Where are we headed with remote sales tax legislation? Repost from Avalara

If tax-free online shopping ends in 2017, what are the implications to your business? Classy Llama and Avalara want to make sure cart compliance makes your list for year-end planning meetings.

This blog post will give you a quick snapshot of information concerning the Sales Simplification Act and what it means for your business. Our free eBook: The Online Sales Tax Showdown provides a more detailed look at the sales tax situation for online retailers today, the proposals in play, and their likely impact for retailers of all types and sizes next year.

The issue of remote sales tax remains a divisive one among federal lawmakers. The 2015 Online Sales Simplification Act (OSSA) draft never became a bill, and OSSA 2016 exists…

geschrieben von
am 28. November 2016 - 6:38

One Magento uiElement default you don’t need to worry about is the maps default, seen here in uiElement’s source file

#File: vendor/magento/module-ui/view/base/web/js/lib/core/element/element.js defaults:{ /* ... */ maps: { imports: {}, exports: {} }, /* ... */ }

This isn’t a magic default, it’s just the uiElement class setting up a skeleton data structure. Magento uses the .maps property of the instantiated object in the Magento_Ui/js/lib/core/element/links module. The functions in the links module are merged in as methods on your uiElement instantiated object. If you look at links.js, wherever you see owner.maps

#File: vendor/magento/module-ui/view/base/web/js/lib/core/element/links.js if (data) { setData(owner.maps, property, data); transfer(owner, data, property, true); }

That .maps property is a property on your uiElement. Magento uses the information in maps to keep…

geschrieben von
am 28. November 2016 - 5:13

Continuing in our informal series of quickies explaining the more magical defaults properties of Magento uiElement objects, today we’ll explore the modules default.

The modules default allows you to link a property in your new object with an object in Magento’s uiRegistry via the registry’s “async” feature.

If that didn’t make sense, consider the following program. You can run this from your browser’s javascript console on the admin’s customer listing page (Customers -> All Customers)

//normally we'd pull in RequireJS module via `define` reg = requirejs('uiRegistry'); UiElement = requirejs('uiElement'); //make sure the registry has a key of customer_listing.customer_listing //if not, you're not on the All Customers page or Magento's changed //something since this was written console.log ( reg.get('customer_listing.customer_listing') ); //create our new class/constructor-function with a //modules default set…
geschrieben von
am 27. November 2016 - 22:33
This entry is part 1 of 1 in the series Magento 2: uiElement Internals. This is the first post in the series. I was chatting with Vinai Kopp in my Patron Slack channel the other day, and via a conversation about the listens default we ended up stumbling across some strange behavior in Magento 2’s uiElement object system. Beyond being a useful bit of information that working Magento 2 developers need to be aware of, it’s also a great example of the problem with “userland” object systems as well as the perfect framing device for launching our next in-depth series. […]
geschrieben von Volodymyr Vygovskyi
am 25. November 2016 - 11:32

It has never been easier to create a development environment. No meter what operation system you use with Docker you can build the exact configuration you need. In this post we will provide steps for creating a sample Magento development environment configured in a single docker-compose.yml file.

Docker is an open source container technology that allows to run any Linux based application as a lightweight container. Docker Compose is a tool for running multi-container Docker applications, which are defined in the Compose file (docker-compose.yml).

If you haven’t installed Docker yet go ahead and download it from their site. There is a native Docker application now for Mac OS, just run the installer. For Ubuntu you can use…

geschrieben von netz98
am 24. November 2016 - 15:47

Ihr Online-Shop ist eine Wassermühle: Von oben fließt Wasser hinein, das Rad dreht sich. Sprich: Nutzer kommen auf Ihre Webseite, kaufen und generieren Ihre Deckungsbeiträge. Nun existieren im Wesentlichen zwei Szenarien, warum Online-Shops nicht funktionieren: Entweder das Mühlrad klemmt, oder es fließt nicht genug Wasser. Beides sind lösbare Probleme.   Performance-Marketing: Ein Schritt nach dem

The post Brand- und Performance-Marketing für den E-Commerce – Teil 1 appeared first on Regalsprecher.

geschrieben von tzahn
am 24. November 2016 - 4:03

Ein eigenes Leitbild zu entwickeln und dem zu folgen, ist keine einfache Sache. Zumal man im Alltag oftmals wenig Zeit für die Erarbeitung eines eigenen Leitbildes hat.

Hat man wirklich wenig Zeit?

Unsere Zeit auf dieser Erde ist begrenzt. Dies ist derzeit eine unumstößliche Wahrheit. Aus diesem Grund ist es wichtig seine Zeit so effektiv wie möglich zu nutzen, um seine Vorstellungen, Ziele, Wünsche zu erreichen. Seit einigen Monaten plane ich meine Zeit sehr sorgsam und ich habe es mir zur Aufgabe gemacht, jeden Tag ein wenig besser darin zu werden. Ich richte mir die Zeit einfach ein, in der ich solche elementaren Themen wie die Erarbeitung und Weiterentwicklung  eines eigenen Leitbildes regelmäßig nachgehe. Derzeit Arbeite ich an der Version 5 meines Leitbildes. Es sind bereits weitere Prinzipien aufgrund der in den letzten Monaten gestammelten Erfahrungen hinzugekommen. Übrigens, die fortwährende Verbesserung in der Organisation / Zeitplanung ist Bestandteil meins…