Dev Talk

Welcome to the Dev Talk category at Inchoo, where we we delve into the world of Web development tools, DevOps, PHP, Frameworks, HTML, JavaScript, and much more. As a full-service eCommerce agency, we understand the importance of staying up-to-date with the latest trends and technologies in the ever-evolving digital landscape.

So, whether you’re seeking guidance on selecting the right tools for your next project, looking for insights on performance optimization, or simply curious about the latest industry trends, you’ve come to the right place.


Magento Customer Group Price Disabled for Store Scope

Magento Customer Group Price Disabled for Store Scope

If you have ever googled “magento advanced pricing customer group price website field disabled” or “magento customer group price disabled for store scope,” this blog post is for you. The lack of results inspired me to look under the hood and, therefore, write about my findings.

The Story Behind Googling

Why was I even googling this? On one of our projects (two websites, each with one store view), I was setting up customer group prices for a small subset of products. Customer group pricing pretty much works like tier pricing; the only difference is that customer group prices have a quantity of 1. 

During the price setup, I didn’t pay much attention to scope since the customer group price form has <select> elements for the website. Advanced pricing modal (where the customer group price is set) looked something like this:

Everything looked and worked fine from both the admin and the front end. I informed the client that I had set the customer group prices and they were ready for testing on staging, along with other agreed-upon improvements. The client responded with a screenshot similar to this, with the message that adding customer group prices is disabled for the website’s scope.

Checking with Default Magento Installation

At first, I’ve thought this was a bug since it worked on default Magento with sample data. I’ve checked our modules and 3rd party extensions that have something to do with rendering of elements on  the admin product edit page. At that moment, I was unaware of the main prerequisite for this scenario:

catalog/price/scope config being set to website

Keep in mind that default Magento installation has this config set to global.

Setting Scope on tier_price Attribute

Few debugging hours later, here’s what I came up with while inspecting admin product edit form loading. This is the story of tier_price product attribute and (non) global scope which looks something like this:

(...) 
Magento\Catalog\Model\Product\Attribute\Backend\Price->setAttribute() 
Magento\Catalog\Model\Product\Attribute\Backend\Price->setScope() 

public function setScope($attribute) // $attribute is tier_price
{
    // checks catalog/price/scope config, in our case scope is 'website'
    if ($this->_helper->isPriceGlobal()) {
        $attribute->setIsGlobal(ScopedAttributeInterface::SCOPE_GLOBAL);
    } else {
        // attribute's scope is set to 'website'
        $attribute->setIsGlobal(ScopedAttributeInterface::SCOPE_WEBSITE);
    }
    return $this;
}
(...)

Later, when product attributes are prepared for form rendering in

Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Eav

the tier_price attribute is (among the others) checked for scope, is it global or not.

Detective Mode Enabled: In Search for ‘disabled’ Property Culprit

If the catalog/price/scope is set to global (and therefore the tier_price attribute scope), part of the code where the disabled property is set is never executed. That’s why the “Add” button from the Customer Group Price form wasn’t disabled when I was checking the reported problem on the default installation. This is the part of product form configuration responsible for customer group price container:

Magento\Catalog\Ui\DataProvider\Product\Form\ProductDataProvider->getMeta() // returns $meta array with product form configuration 
// part of $meta array which is the reason this debugging looks like this 
// (printed out in JSON format for easier readability)
{
  "arguments": {
	"data": {
  	"config": {
    	"formElement": "container",
    	"componentType": "container",
    	"breakLine": false,
    	"label": "Tier Price",
    	"required": "0",
    	"sortOrder": 40
  	}
	}
  },
  "children": {
	"tier_price": {
  	"arguments": {
    	"data": {
      	"config": {
        	"dataType": "text",
        	"formElement": "input",
        	"visible": "1",
        	"required": "0",
        	"notice": null,
        	"default": null,
        	"label": "Tier Price",
        	"code": "tier_price",
        	"source": "advanced-pricing",
        	"scopeLabel": "[WEBSITE]",
        	"globalScope": false,
        	"sortOrder": 40,
        	"service": {
          	"template": "ui/form/element/helper/service"
        	},
        	"componentType": "field",
        	"disabled": true -> causes “I’m disabled” meme
      	}
    	}
  	}
	}
  }
}

Who and where says that tier_price element is disabled? Let’s take a look at stack trace and responsible methods (pay attention to comments!):

(...) 
// group of interest is advanced-pricing {Magento\Eav\Model\Entity\Attribute\Group} 
Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Eav->modifyMeta() 

// here we're "catching" tier_price attribute 
Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Eav->getAttributesMeta() 

Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Eav->addContainerChildren() 

// attribute_code = tier_price, $groupCode = advanced-pricing, $sortOrder = 4 
Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Eav->getContainerChildren(ProductAttributeInterface $attribute, $groupCode, $sortOrder) 

Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Eav->setupAttributeMeta() 
Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Eav->addUseDefaultValueCheckbox() 

private function addUseDefaultValueCheckbox(ProductAttributeInterface $attribute, array $meta)
{
   /**
    * $canDisplayService = false if catalog/price/scope is global
    * so 'disabled' property is never set in this case
    */
    $canDisplayService = $this->canDisplayUseDefault($attribute);

    if ($canDisplayService) {
        $meta['arguments']['data']['config']['service'] = [
            'template' => 'ui/form/element/helper/service',
        ];

        /** 
          * This evaluates to !false = true so 'disabled' property for tier_price element in 
          * Customer Group Price form is set to true.  
          * Answer to “Who and where says that tier_price element is disabled?” It's HERE! 
          */
        $meta['arguments']['data']['config']['disabled'] = 
            !$this->scopeOverriddenValue->containsValue(
                \Magento\Catalog\Api\Data\ProductInterface::class,
                $this->locator->getProduct(),
                $attribute->getAttributeCode(),
                $this->locator->getStore()->getId()
            );
        }

    return $meta;
}
-----------------------------------------------------------------------------------------------------------
private function canDisplayUseDefault(ProductAttributeInterface $attribute)
{
    $attributeCode = $attribute->getAttributeCode();

    /** @var Product $product */
    $product = $this->locator->getProduct();
    if ($product->isLockedAttribute($attributeCode)) {
        return false;
    }

    if (isset($this->canDisplayUseDefault[$attributeCode])) {
        return $this->canDisplayUseDefault[$attributeCode];
    }

    // $attribute is tier_price, and it's scope depends on catalog/price/scope
    return $this->canDisplayUseDefault[$attributeCode] = (
        // scope 'website' != scope 'global'
        ($attribute->getScope() != ProductAttributeInterface::SCOPE_GLOBAL_TEXT)  
        && $product
        && $product->getId()
        && $product->getStoreId()
    );
}

Workaround for Enabling the Add Button

However, since the client explicitly requested to be able to edit Customer Group Price while on store view scope, I’ve prepared a workaround in the form of a plugin. Create a new module (mine is Inchoo_CustomerGroupPrice) and add below code to your etc/di.xml file.

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
   <type name="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\AdvancedPricing">
        <plugin name="advanced_pricing_customer_group_price_plugin"
                type="Inchoo\CustomerGroupPrice\Plugin\Catalog\Ui\DataProvider\Product\Form\Modifier\AdvancedPricingPlugin"/>
    </type>
</config>

AdvancedPricingPlugin checks $meta array that contains necessary information about tier_price form element and forces enabling of that element. Here’s the implementation:

<?php

declare(strict_types=1);

namespace Inchoo\CustomerGroupPrice\Plugin\Catalog\Ui\DataProvider\Product\Form\Modifier;

use Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\AdvancedPricing;
use Magento\Framework\Stdlib\ArrayManager;

class AdvancedPricingPlugin
{
    /**
     * @param ArrayManager $arrayManager
     */
    public function __construct(protected ArrayManager $arrayManager)
    {
    }

    /**
     * @param AdvancedPricing $subject
     * @param array $meta
     * @return array
     */
    public function afterModifyMeta(AdvancedPricing $subject, array $meta): array
    {
        $path = 'advanced_pricing_modal/children/advanced-pricing/children/tier_price/arguments/data/config/disabled';

        if ($this->arrayManager->get($path, $meta) === true) {
            $meta = $this->arrayManager->set($path, $meta, false);
        }

        return $meta;
    }
}

Remember to flush the cache before testing the plugin! The plugin’s execution should result in the customer group price being enabled for editing while being on store scope in the Magento admin dashboard.

A Feature or a Bug?

Enabling customer group price for website scope is a specific problem, i.e. subject (it’s a feature, not a bug! 😀 ). I hope that it will help someone, at least at some point, not to lose time for something that is simply related to Magento configuration and works as it should. It’s much quicker when you know where to look at. 🙂

Read more

MageOS and How Open Source Shapes eCommerce

MageOS and How Open Source Shapes eCommerce

Earlier this year, in our blog post What is Mage-OS and Why Did We Join?, we talked about the current state of Magento and how Mage-OS was helping propel the platform into the future.

To give a short recap:

Mage-OS Distribution is an independent and community driven fork of Magento Open Source that retains compatibility while allowing the freedom to innovate and push the platform forward. With Adobe’s primary focus on Adobe Commerce, the aim of Mage-OS is to put the platform back into the hands of the community and bring back tangible improvements in the form of new features and enhancements while lowering the barrier of entry for merchants and developers.

In other words, Mage-OS wants to ensure the original values of an open source eCommerce platform remain intact. It seeks to empower smaller businesses and developers who rely on Magento without the need for expensive enterprise solutions.

The Role of Open Source in eCommerce

Throughout the years, open-source development has significantly contributed to and shaped eCommerce platforms. It has encouraged innovation, reduced costs and increased flexibility for developers and businesses. Developers can share best practices and innovations and learn from each other which benefits the entire ecosystem.

Open source platforms like Magento and WooCommerce have historically relied on contributions of developers worldwide. For example, Magento’s community has contributed with updates and plugins, fixing bugs and optimizing performance which has kept the platform on the cutting edge of eCommerce technologies. It allows for extensive customization, giving businesses the flexibility to modify the source code to their specific needs and expand beyond the bounds of existing code.

Using an open source platform gives you control over your online store’s design and functionalities while reducing reliance on a single vendor and their product. It gives you independence from being locked into specific technologies or pricing models. You have the flexibility to customize the software according to how it best suits your business needs.

The downside when working with open source software is it requires time and special knowledge. Taking full advantage of an open source platform will require expertise and hiring a web developer to help you along and customize the platform to meet your needs.

How Mage-OS Restores the Role of Open Source for Magento

With Adobe’s shift towards an enterprise-level, paid version of Magento, concerns had emerged about the future of the open-source version of the platform.

Mage-OS promotes a more decentralized and community-led approach to development. It provides a way for the Magento developer community to contribute, innovate, and collaborate on the evolution of the platform. This democratizes the development process, allowing for more diverse input and quicker updates to the software. With an independent organization overseeing the platform, decisions about the platform’s direction, features, and updates can be made in a more transparent and inclusive manner, ensuring the community has a say in its future.

Through this approach, Mage-OS offers a sustainable path for Magento Open Source. It ensures developers and smaller businesses can continue using and improving the platform without being tied to enterprise licensing fees or closed development while also providing a new sense of ownership and direction for Magento Open Source.

As a community led initiative, Mage-OS can also prioritize the needs of smaller businesses and independent developers who may be overlooked by Adobe’s enterprise focus. It can focus on building features and improvements that are especially beneficial to the open-source user base, ensuring the platform remains user-friendly and versatile.

Terezija Radić

Let’s hear from Terezija, our backend developer, on how she sees the recent development of Mage-OS:

I’m glad to see that the Mage-OS community is becoming more prominent and recognizable in the Magento world. There have been some delays in the development process, but it’s slowly getting back on track as everyone returns to their working routine after the summer calm.

Just recently, progress on the new admin theme and page builder updates was presented, and it was so great to actually see the progress that’s been made since the introduction of these improvements. I’m looking forward to implementing the announced features, such as fixing default search suggestions and indexer improvements. All that will automatically reflect on Inchoo’s Traktor Servis webshop and future Mage-OS based webshops, which is excellent!

Our First Mage-OS Project: Traktor Servis

In September 2024, we launched our latest project for our client, Traktor Servis. This is among the first stores ever released on the Mage-OS distribution.

The Mage-OS distribution was chosen to ensure the accessibility, longevity, and success of the Magento platform. We particularly focused on ensuring and establishing a safe and secure infrastructure and environment for our client and their new online store. Our main goal was to provide future users with a clean, simple and user-friendly website that will be easy to navigate while at the same time providing them with key functionalities from the automotive industry.

Another one of our backend developers, Jurica Šoštarić, explored in more detail why we chose Mage-OS for this project in his blog post after the launch of the web store. The team was excited from the start to put Mage-OS into action, and in spite of some early challenges, they were able to confirm that migrating an existing project to Mage-OS was fully possible.

Jurica Šoštarić

Let’s hear more from Jurica about working with Mage-OS:

Successfully launching our first Mage-OS website was a significant milestone for our team. From a developer’s standpoint, the process of transitioning from Magento to Mage-OS was smoother than anticipated, and despite some initial challenges with tool compatibility and the uncertainty regarding security patches, the Mage-OS team’s timely updates ensured we could meet our deadlines without compromising security.

Our work on this project marks the beginning of what we believe will be a promising journey with Mage-OS. This experience has proven its viability for future projects. We look forward to continuing to innovate and build upon this foundation.

The Future of Mage-OS and the Impact of Open Source

By tapping into the power of open source and offering a community-driven approach to platform development, Mage-OS is a step forward for the Magento community. Mage-OS ensures that the open-source values of flexibility, innovation, and collaboration remain at the forefront of eCommerce.

Our experience with the Traktor Servis project has reinforced the potential of Mage-OS, showing it to be a viable option for future web projects. As both Terezija and Jurica have explained, we are excited to continue exploring its capabilities and contributing to its growth alongside the broader Magento community.

At the time of publishing of this article, Mage-OS continues to innovate and build upon its foundation, with new functionalities on the way and many still in work!

Read more

We Released the First Mage-OS Website

We Released the First Mage-OS Website

At the beginning of this year, we started familiarizing ourselves with Mage-OS after recognizing its potential. A small team within the company began exploring what Mage-OS has to offer, identifying differences between Magento and Mage-OS, and determining what needs to be done to adapt the platform to our internal development processes. We could not possibly imagine these actions would lead to making the first Mage-OS project ever released.

Read more

Speed, Sustainability, and Networking – at Meet Magento Poland!

Speed, Sustainability, and Networking – at Meet Magento Poland!

Meet Magento Poland 2024 is just around the corner, and it will bring together Magento experts from around the world. This year’s conference is centered around one crucial theme: performance, with the motto “Need for Speed—Edition on Magento Performance.” It will be a perfect opportunity to connect and discuss how we can keep our eCommerce projects moving at top speed, with no limits!

Stjepan Udovičić, Tihomir Vranješ, Josip Ouzecky, and Tomislav Bilic will be representing us at the event and will be more than happy to connect with community members and network with other agencies that will attend the conference.

Our CEO, Tomislav Bilić, will also contribute to an interesting panel discussion exploring the delicate balance between optimizing eCommerce platforms and reducing their carbon footprint. As we measured this exact metric at one of our previous projects, Tomislav will gladly present some of our findings. I asked him to share his thoughts with us before the conference.

Tomislav: I’m happy to announce that I’ll be a panelist speaker at Meet Magento Poland. This will be my fourth time attending the event – after two previous ones in Warsaw and one in Kraków. The fourth Time’s a Charm!This year, I’ll be joining a panel led by Łukasz Bajsarowicz on Sustainable Commerce: Do We Need to Choose Between Environment and Performance?

We’ll be exploring the challenge of balancing environmental responsibility, including carbon footprint in web development, with the demand for high-performing eCommerce solutions. I’ll be joined by Mateusz Krzeszowiak and Kamil Porembiński, who will be sharing their own unique perspectives on the topic. I look forward to connecting with everyone in Poznań and diving into a conversation that’s not only timely but essential for the future of our industry. Hope to see you there!

While this is Tomislav’s fourth time attending this event in Poland, our backend developer team lead, Tihomir Vranješ, is going to his first Meet Magento conference. I used this opportunity to talk to him and ask him about his expectations from the event and what he is most excited about.

Tihomir: As a backend developer, it is in my nature to think about, talk about, and get my hands dirty on performance improvements, so I am thrilled and can’t wait to hear the experiences of people who face the same problems. Also, as an early adopter of Mage-OS and a member of the Mage-OS community, I am happy to finally meet in person the team I’ve been talking to over the screen this year on weekly tech meets on Discord. It is a great opportunity for all of us to share experiences and have a great time doing so!


In the end, we’d like to thank the organizers for putting together this event! And to all attendees—enjoy the conference and make the most of the opportunity to learn and network! Also, feel free to get in touch! Whether through email, LinkedIn, or any other platform, we’re eager to connect.

Read more

Group your Shipping Methods by Carrier on Checkout

Group your Shipping Methods by Carrier on Checkout

Having several different shipping providers on your site improves the user experience, which is crucial for converting customers into buyers. This article will show you how to group the shipping methods by carrier provider and allow your users to choose their preferred shipping method.

Read more

Back to the Future with Hyvä: Developers’ Perspective

Back to the Future with Hyvä: Developers’ Perspective

It’s become more and more obvious to everyone in the Magento sphere – Hyvä is the future. This cutting-edge frontend theme solves some of Magento’s long-standing issues while achieving stunning results when it comes to speed and performance. It’s true: just take a look at the core web vitals of any Hyvä store.

Hyvä has changed how we work with Magento, and no one can better attest to this than our own frontend team, wrestling with Magento at the front lines. We’ve already written at length about the benefits of Hyvä, but hearing our frontend developers’ first-hand experiences can give even more weight to these advantages.

Magento Before Hyvä

Previously, Magento 2 stores have relied on default themes such as Blank or Luma that load a lot of unnecessary frontend elements. This tended to result in a slower online store, adversely affecting SEO ranking and conversion rates. In short, there was too much bloat.

Josip, our frontend developer, can explain in more detail what the issues with Magento 2 were.

Josip Oužecky

Hyvä is well-known as a frontend theme that helps resolve some long-standing issues with Magento. What were some common obstacles you faced in working with Magento before Hyvä?

The main problem with developing the default Magento 2 theme was performance issues. The default Magento frontend uses heavy JavaScript libraries, leading to sluggish page load times that negatively impact user experience and SEO.

As a developer, it was sometimes impossible to improve the website further due to the limitations of the tech stack. Additionally, the default Magento frontend lacked flexibility, making customizations to meet specific business requirements often cumbersome and time-consuming.

For me, the most frustrating aspect of developing the default Magento 2 theme was the poor developer experience, as I did not find the process enjoyable. These problems caused frustration for merchants because they needed to invest more to see only a small improvement in performance or to obtain functionality that was crucial for their business.

As new competitors emerged, it was becoming plain Magento’s frontend was turning outdated. Despite its robust functionalities, slow and stagnant stores in this day and age were becoming unacceptable. Magento wasn’t cool anymore.

Thankfully, Hyvä appeared as a community initiative intended to resolve this issue. As some say, the frontend theme everyone wished Magento had long had.

Hyvä Developer Experience

Developer experience has become an important topic over the years. A lot of eCommerce projects require solutions that may not be there right out of the box, but need developers to build and maintain.

It is underestimated how much good code can contribute to a project. It makes the developers’ experience easier and more enjoyable, saves time, and enables them to have greater focus on other areas of the project. Additionally, it ensures any future developers will have an easier time delving into the project and getting versed in its code.

The same is true for any project; if you have a good experience working on it, you will be better motivated and deliver better results. Frustration is rarely a good motivator.

Josip Oužecky

How did Hyvä help resolve Magento’s issues? Did it improve your experience?

Working with Hyvä is more enjoyable because you can use technologies that are widely adopted beyond just the Magento 2 world. Additionally, when someone asks how long a task will take, I can provide a more accurate estimate compared to the old Magento 2 theme development.

Additionally, developers find it more enjoyable to create new themes and functionality with Hyvä compared to the default Magento 2 theme. They also structure the code much better than in the old Magento 2.

An additional testament to the experience of working with Hyva comes from Karlo, our junior frontend developer.

Karlo, how was your onboarding experience with both Magento and Hyvä?

Since I haven’t worked with Magento before, I was expecting a complicated platform. I couldn’t have imagined how many different options and possibilities exist, and how truly complex and intricate everything is.

Onboarding initially seemed difficult, and it took several months to get a rough understanding of how things work. However, thanks to great colleagues who were always ready to help, it wasn’t as daunting in the end, and the implementation of Hyvä made working with Magento much easier.

As Josip explains, Hyvä is a great starting point because it addresses many of Magento’s problems related to performance issues. It solves them by replacing heavy JavaScript libraries with vanilla JavaScript and a small framework called Alpine.js. by using Tailwind CSS for styling.

With reduced complexity, as well as better speed and performance, online stores built with Hyvä can breeze through core web vitals with flying colors, making Magento cool again.

The Future of Hyvä

Hyvä is still growing, updates are common, and new features continue to be rolled out. What anyone who chooses Hyvä can expect can be best explained by Josip.

Josip Oužecky

What benefits does Hyvä offer to merchants? How does a Hyvä-Powered Magento product compare to a Magento product?

If a merchant decides to go with a new theme on Hyvä, they can be confident their new theme will perform better than one developed on the default Magento 2 stack. New customizations and functionalities will also be implemented faster.

Though Hyvä doesn’t have as many modules readily available compared to the default Magento 2 theme, many companies that create modules now support Hyvä and are working on making them compatible. Even if some modules are not compatible with Hyvä, the long-term benefits of additional adjustments make the investment worth it.

Additionally, one of the most significant features they offer is Hyvä Checkout, which can effectively replace the default Magento 2 checkout and also reduce complexity and the time required to create a better checkout process.

Here in Inchoo, the frontend theme has already become the future. Our HNK Hajduk project, utilizing Hyvä Themes, was a great success, and we have continued working with the platform ever since.

Josip Oužecky

Josip, how do you see future work with Hyvä?

I believe Hyvä is well suited as a long term solution and that they will continue to optimize the theme further in the future. While the initial cost of creating a new webshop with Hyvä might be similar, it provides superior UI and UX.

At Inchoo, we always strive to ensure the new site excels by delivering the best possible result. Additionally, any customizations and new features after the initial launch can be implemented much faster with Hyvä due to its efficient code structure.

And you, Karlo?

I believe it will take some time to transfer all the functionalities we used on Magento to Hyvä, but once that is done, the work will be faster and easier.

And there you have it: a first-hand perspective from those who are putting Hyvä to use. Hyvä makes Magento projects easier for our developers, allowing them greater time and creativity to get any project done even better.

Visit our Hyvä-Powered Magento page to learn even more about all of Hyvä’s benefits and how they can help your eCommerce business, whether that means building a whole new online storefront, or migrating from another platform.

It’s worth it, we promise.

Read more

What is Mage-OS and Why Did We Join?

What is Mage-OS and Why Did We Join?

Refreshed Values

Over the past several years, particularly since Adobe’s acquisition of Magento, the growth strategy of Magento Open Source has become increasingly ambiguous. Adobe’s focus has predominantly shifted towards enriching its Adobe Commerce + Cloud + B2B offerings, resulting in a limited roadmap for Magento Open Source, primarily encompassing security patches and minor improvements. Merchants and Agencies that invested their energy and time in this platform are not pleased with this path. In response, an initiative has been formed with the aim of establishing a community-driven fork under the umbrella of the Mage-OS Association.

Read more

How to generate SSH keys for Git authorization

SSH keys © Some rights reserved by @boetter / flickr

Securing your Git interactions with SSH keys is a fundamental aspect of software development today, offering a secure and convenient way to authenticate with remote repositories. Whether you’re an experienced developer or just starting your coding journey, understanding how to generate SSH keys for Git authorization is an essential skill to ensure the integrity and privacy of your code. In this quick guide, we’ll walk you through the process of creating SSH keys on Windows, Mac, and Linux systems, empowering you to access and collaborate on your Git projects with enhanced security.

Read more

ERP and eCommerce platform integration

eCommerce & ERP integration featured

The benefits of ERP (Enterprise Resource Planning) and eCommerce integration are immense when the process is done the right way. ERP presents the “backbone” of your business and a powerful software system designed to integrate and unify the main functional areas of your organization. What should companies keep in mind when planning the integration of two key systems in their business operations – ERP and eCommerce platform?

Read more

Unit testing in Magento 2

Unit testing in Magento 2

Magento 2 comes pre-installed with PHPUnit, an automated testing framework for PHP. It is included as one of the dependencies in Magento 2. Covering the basics of PHPUnit is out of the scope of this tutorial, after a short introduction we are going to focus on the practical example of using PHPUnit with Magento 2. For those who are interested in PHPUnit basics, I would recommend reading documentation or tutorials on the web since it is a very well documented topic.

Read more

Symfony templating with Twig

Symfony templating with Twig

Symfony 4, (further in the text – Symfony) for templating provides twig bundle, which is a very useful templating engine. It is built by SensioLabs – the company behind Symfony. Besides Symfony, there are more platforms supporting Twig such as Drupal8, eZPublish, phpBB, Piwik, OroCRM, etc. In this article we will cover the basics and show how to extend them. Twig is by default not installed with Symfony, you need to include symfony/twig-bundle with the composer (composer require symfony/twig-bundle).

Read more

Local development with Valet+

Valet Plus

Development has been rapidly growing. In fact, at this stage, it has grown so much that it puts a lot of pressure on developers to become super-humans. However, the developers should do what they’re best at, and that is writing code without having to struggle with a local setup. Luckily, there are tools that help developers focus more on code and less on the environment.

Read more

Symphony of PHP – Symfony 4

Symphony PHP Inchoo

You have probably heard of PHP framework called Symfony, today I will share my and Inchoo’s experience with this great framework. You can basically do anything in Symfony, but the most important question you should ask yourself is: Should I use Symfony for my application? In order to help you answer the question, I will try to explain basic concepts, give my thoughts and share some experiences in eCommerce development.

Read more

Version control systems in UI design

Version control systems in UI design

Our design team switched to working in Sketch a while ago but it wasn’t until version 43 we really started seeing some opportunities to change our workflows more significantly. It was also an opportunity for more designers to work on the same project as well as collaborate with developers more easily. If you’re looking for professional Magento web design services, feel free to check out our Magento Web Design Service for more information.

Read more

Are you in for some RWD workshop? Vitaly Friedman from Smashing Magazine is coming to Osijek, Croatia

Are you in for some RWD workshop? Vitaly Friedman from Smashing Magazine is coming to Osijek, Croatia

We are proud to announce an awesome Responsive Web Design workshop by one and only Vitaly Friedman! This writer, speaker, author and editor-in-chief of Smashing Magazine will get up on stage at Inchoo’s hometown Osijek with smashing workshop “New Adventures in Responsive Web Design”.

Faculty of Economics at Osijek will be the main point of this event on June 17 from 9AM to 6PM.

Read more

Sass Output Styles

Sass Output Styles

Sass has four different CSS output style. By changing setting for :style option or using the --style command-line flag.

I will show you how Sass outputs this piece of SCSS code in all style options with style option explanation.

Read more

Custom data components in Pimcore

Custom data components in Pimcore

Today I will show you how to create custom data component in Pimcore 4.4.. If you are using Pimcore, sooner or later you will end up with requirement for new form element (complex type). Data components in Pimcore are object types used for complex data modeling on object. Data component consists from data, tag Extjs scripts and one Model which is responsible for saving/loading configuration. Currently Pimcore has 19 complex data components (you can read more on https://www.pimcore.org/docs/latest/Objects/Object_Classes/Data_Types/index.html), and they will cover most requirements you will ever need. However, if (when) you’ll need a custom data component, here’s how you can create it.

Read more

Mitigating Facebook’s “x-fb-http-engine: Liger” site hammering using Apache or nginx

Mitigating Facebook’s “x-fb-http-engine: Liger” site hammering using Apache or nginx

Facebook is using a sort of web page prerendering mechanism in it’s in-app browser for mobile users [see disclosure here]. It is used by Facebook’s in-app browser to speed up page rendering for web link content shared on Facebook. But it can cause serious headaches, and this post should explain how to mitigate it with Apache or nginx.

Read more

A simple frontend workflow for Gulp

A simple frontend workflow for Gulp

What is Gulp?

Gulp is a task/build runner which uses Node.js for web development. In this tutorial, I will not explain how to create your Gulp plugin but I will show you how you can create a simple, basic, customized build process for your frontend workflow to ease your job.

Read more

Magento without an IDE? Say hello to Sublime!

Magento without an IDE? Say hello to Sublime!

We are all aware of the Magento codebase size and its complexity. That is one of the reasons most people use full-fledged IDEs for Magento programming. Most answers regarding the “what IDE should I be using for Magento?” or “what is the best Magento development environment?” include big boys like Eclipse, NetBeans and PhpStorm. Since you’ve already read the title, you may be wondering: “what can a text editor like Sublime Text offer me for my Magento development?”. Vanilla installation? Not much, but with the help of a few plugins, well… Keep reading and you just may be in for a treat.

Read more

Using Redis cache backend and session storage in Magento

Using Redis cache backend and session storage in Magento

Combined with the power of Zend Framework, Magento currently supports many cache backends with file system, APC and Memcached being the most widely used. Every supported cache backend brings it’s own set of upsides and downsides, but since there’s a lot to choose from, one could easily assume that as far as cache backends are concerned, Magento is very well covered. To some degree this might be true, but when you seriously up the number of requests, none of the cache backends scale well. Besides poor scaling, some of the cache backend implementations also suffer from serious limitations like not having support for grouping of related cache entries, a.k.a. tagging. With this in mind, and in order to provide support for stable and scalable cache backend, latest versions of Magento are turning to Redis key-value store. In this article I’ll do my best to describe process of implementing Redis as cache and session backend with recent versions of Magento Community and Enterprise Edition.

Read more