How to extend the storefront (Shopware 6)

You can download a plugin showcasing the topic here.

Description

In order to be able to extend the templates of the B2B Suite with another plugin, you have to make sure to register a TemplateNamespaceHierarchyBuilder in your plugin.

Registering a TemplateNamespaceHierarchyBuilder

Register the TemplateNamespaceHierarchyBuilder by tagging it in the services.xml file of your plugin.

<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
    <services>
        <service id="MyPlugin\Framework\Adapter\Twig\NamespaceHierarchy\TemplateNamespaceHierarchyBuilder">
            <tag name="shopware.twig.hierarchy_builder" priority="750"/>
        </service>
    </services>
</container>

The really important part here is the priority. 750 should work fine for most cases, but if you are having problems here, play around with the priority.

The TemplateNamespaceHierarchyBuilder service

The TemplateNamespaceHierarchyBuilder looks like this. Please replace MyPlugin with the name of your plugin.

<?php declare(strict_types=1);

namespace MyPlugin\Framework\Adapter\Twig\NamespaceHierarchy;

use Shopware\Core\Framework\Adapter\Twig\NamespaceHierarchy\TemplateNamespaceHierarchyBuilderInterface;
use function array_merge;

class TemplateNamespaceHierarchyBuilder implements TemplateNamespaceHierarchyBuilderInterface
{
    public function buildNamespaceHierarchy(array $namespaceHierarchy): array
    {
        return array_merge($namespaceHierarchy, ['MyPlugin']);
    }
}