PHPackages                             spryker-demo/shop-theme-feature - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Templating &amp; Views](/categories/templating)
4. /
5. spryker-demo/shop-theme-feature

ActiveMetapackage[Templating &amp; Views](/categories/templating)

spryker-demo/shop-theme-feature
===============================

Shop theme \[feature\]

1.0.0(9mo ago)00proprietaryPHP &gt;=8.2CI passing

Since Sep 25Pushed 9mo agoCompare

[ Source](https://github.com/spryker-demo/shop-theme-feature)[ Packagist](https://packagist.org/packages/spryker-demo/shop-theme-feature)[ RSS](/packages/spryker-demo-shop-theme-feature/feed)WikiDiscussions main Synced today

READMEChangelog (1)Dependencies (5)Versions (2)Used By (0)

Spryker Demo Shop Theme Feature
===============================

[](#spryker-demo-shop-theme-feature)

[![Minimum PHP Version](https://camo.githubusercontent.com/ec21f169d70b69344c67d6f18fa1a24d20476d2f0cd680e8c4a1534c22f34e5f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344253230382e322d3838393242462e737667)](https://php.net/)

Installation
------------

[](#installation)

### Install feature

[](#install-feature)

```
composer require spryker-demo/shop-theme-feature

```

### Add `SprykerDemo` namespace to configuration

[](#add-sprykerdemo-namespace-to-configuration)

```
$config[KernelConstants::CORE_NAMESPACES] = [
    'SprykerDemo',
     ...
];

```

### Adjust environment config with filesystem

[](#adjust-environment-config-with-filesystem)

```
# config/Shared/config_default.php

$config[FileSystemConstants::FILESYSTEM_SERVICE] = [
    ...
    'logo' => [
        'sprykerAdapterClass' => Aws3v3FilesystemBuilderPlugin::class,
        'root' => '',
        'path' => 'sc-b2b/yves/logo/',
        'key' => getenv('AWS_S3_KEY') ?? '',
        'secret' => getenv('AWS_S3_SECRET') ?? '',
        'bucket' => 'spryker-scb2b',
        'version' => '2006-03-01',
        'region' => 'eu-west-2',
    ],
    ...
];

# config/Shared/config_default.php

$config[FileSystemConstants::FILESYSTEM_SERVICE] = [
    ...
    'logo' => [
        'sprykerAdapterClass' => Aws3v3FilesystemBuilderPlugin::class,
        'root' => '',
        'path' => 'sc-b2b/yves/logo/',
        'key' => getenv('AWS_S3_KEY') ?? '',
        'secret' => getenv('AWS_S3_SECRET') ?? '',
        'bucket' => 'spryker-scb2b',
        'version' => '2006-03-01',
        'region' => 'eu-west-2',
    ],
    ...
];

```

### Add default theme logo path to the environment config

[](#add-default-theme-logo-path-to-the-environment-config)

```
# config/Shared/config_default.php

$config[ShopThemeConstants::DEFAULT_LOGO_PATH] = getenv('SHOP_THEME_DEFAULT_LOGO_PATH');

```

### Wire filesystem reader, writer and stream plugins

[](#wire-filesystem-reader-writer-and-stream-plugins)

```
# src/Pyz/Service/FileSystem/FileSystemDependencyProvider.php

use Spryker\Service\FileSystem\FileSystemDependencyProvider as SprykerFileSystemDependencyProvider;
use Spryker\Service\Flysystem\Plugin\FileSystem\FileSystemReaderPlugin;
use Spryker\Service\Flysystem\Plugin\FileSystem\FileSystemStreamPlugin;
use Spryker\Service\Flysystem\Plugin\FileSystem\FileSystemWriterPlugin;

class FileSystemDependencyProvider extends SprykerFileSystemDependencyProvider
{
    /**
     * @return \Spryker\Service\Flysystem\Plugin\FileSystem\FileSystemReaderPlugin
     */
    protected function getFileSystemReaderPlugin(): FileSystemReaderPlugin
    {
        return new FileSystemReaderPlugin();
    }

    /**
     * @return \Spryker\Service\Flysystem\Plugin\FileSystem\FileSystemWriterPlugin
     */
    protected function getFileSystemWriterPlugin(): FileSystemWriterPlugin
    {
        return new FileSystemWriterPlugin();
    }

    /**
     * @return \Spryker\Service\Flysystem\Plugin\FileSystem\FileSystemStreamPlugin
     */
    protected function getFileSystemStreamPlugin(): FileSystemStreamPlugin
    {
        return new FileSystemStreamPlugin();
    }
}

```

### Wire the Aws S3 plugin

[](#wire-the-aws-s3-plugin)

```
# src/Pyz/Service/FlySystem/FlySystemDependencyProvider.php

use SprykerDemo\Service\FlysystemAws3v3FileSystem\Plugin\Flysystem\Aws3v3FilesystemBuilderPlugin;
...
    protected function addFilesystemBuilderPluginCollection($container): Container
    {
        $container->set(static::PLUGIN_COLLECTION_FILESYSTEM_BUILDER, function (Container $container) {
            return [
                ...
                new Aws3v3FilesystemBuilderPlugin(),
                ...
            ];
        });

        return $container;
    }

```

### Wire the ShopThemeGui plugins

[](#wire-the-shopthemegui-plugins)

```
# src/Pyz/Zed/ShopThemeGui/ShopThemeGuiDependencyProvider.php

use Spryker\Zed\StoreGui\Communication\Plugin\Form\StoreRelationDropdownFormTypePlugin;

    protected function getAclEntityConfigurationExpanderPlugins(): FormTypeInterface
    {
        new StoreRelationDropdownFormTypePlugin();
    }

```

### Implement and wire ShopThemeStoreSourcePlugin

[](#implement-and-wire-shopthemestoresourceplugin)

```
# src/Pyz/Zed/ShopThemeGui/ShopThemeGuiDependencyProvider.php

use SprykerDemo\Zed\ShopThemeGui\Dependency\Plugin\ShopThemeStoreSourcePluginInterface;

    /**
     * @return \SprykerDemo\Zed\ShopThemeGui\Dependency\Plugin\ShopThemeStoreSourcePluginInterface
     */
    protected function getShopThemeStoreSourcePlugin(): ShopThemeStoreSourcePluginInterface
    {
        // Wire your custom ShopThemeStoreSourcePlugin here.
    }

```

### Wire the publisher plugins

[](#wire-the-publisher-plugins)

```
# src/Pyz/Zed/Publisher/PublisherDependencyProvider.php

use SprykerDemo\Zed\ShopThemeStorage\Communication\Plugin\Publisher\ShopTheme\ShopThemeStorageDeleteByShopThemeStorePublisherPlugin;
use SprykerDemo\Zed\ShopThemeStorage\Communication\Plugin\Publisher\ShopTheme\ShopThemeStorageDeletePublisherPlugin;
use SprykerDemo\Zed\ShopThemeStorage\Communication\Plugin\Publisher\ShopTheme\ShopThemeStorageWriteByThemeStorePublisherPlugin;
use SprykerDemo\Zed\ShopThemeStorage\Communication\Plugin\Publisher\ShopTheme\ShopThemeStorageWritePublisherPlugin;

    protected function getPublisherPlugins(): array
    {
        return array_merge(
            ...
            $this->getShopThemeStoragePlugins(),
        );
    }

    public function getShopThemeStoragePlugins(): array
    {
        return [
            new ShopThemeStorageDeleteByShopThemeStorePublisherPlugin(),
            new ShopThemeStorageDeletePublisherPlugin(),
            new ShopThemeStorageWriteByThemeStorePublisherPlugin(),
            new ShopThemeStorageWritePublisherPlugin(),
        ];
    }

```

### Wire the Acl plugins

[](#wire-the-acl-plugins)

```
# src/Pyz/Zed/AclMerchantPortal/AclMerchantPortalDependencyProvider.php

use SprykerDemo\Zed\ShopTheme\Communication\Plugin\AclMerchantPortal\ShopThemeAclEntityConfigurationExpanderPlugin;

    protected function getAclEntityConfigurationExpanderPlugins(): array
    {
        return [
            ...
            new ShopThemeAclEntityConfigurationExpanderPlugin(),
        ];
    }

```

### Wire the queue plugin

[](#wire-the-queue-plugin)

```
# src/Pyz/Zed/Queue/QueueDependencyProvider.php

use Spryker\Zed\Synchronization\Communication\Plugin\Queue\SynchronizationStorageQueueMessageProcessorPlugin;
use SprykerDemo\Zed\ShopThemeStorage\ShopThemeStorageConfig;

    protected function getProcessorMessagePlugins(Container $container): array
    {
        return [
            ...
            ShopThemeStorageConfig::SHOP_THEME_SYNC_STORAGE_QUEUE => new SynchronizationStorageQueueMessageProcessorPlugin(),
        ];
    }

```

### Wire the synchronization plugin

[](#wire-the-synchronization-plugin)

```
# src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php

use SprykerDemo\Zed\ShopThemeStorage\Communication\Plugin\Synchronization\ShopThemeSynchronizationDataPlugin;

    protected function getSynchronizationDataPlugins(): array
    {
        return [
            ...
            new ShopThemeSynchronizationDataPlugin(),
        ];
    }

```

### Wire the twig extension plugin

[](#wire-the-twig-extension-plugin)

```
# src/Pyz/Zed/Twig/TwigDependencyProvider.php

use SprykerDemo\Zed\ShopThemeGui\Communication\Plugin\Twig\Buttons\Form\BackofficeLogoTwigExtensionPlugin;
use SprykerDemo\Zed\ShopThemeGui\Communication\Plugin\Twig\Buttons\Form\MPLogoTwigExtensionPlugin;

    protected function getTwigPlugins(): array
    {
        return [
            ...
            new BackofficeLogoTwigExtensionPlugin(),
            new MPLogoTwigExtensionPlugin(),
        ];
    }

```

### Adjust navigation configuration file

[](#adjust-navigation-configuration-file)

```
# config/Zed/navigation.xml

            ...

                Themes
                Themes
                shop-theme-gui
                index
                index

```

### Adjust RabbitMq configuration

[](#adjust-rabbitmq-configuration)

```
# src/Pyz/Client/RabbitMq/RabbitMqConfig.php

use SprykerDemo\Zed\ShopThemeStorage\ShopThemeStorageConfig;
...

protected function getPyzSynchronizationQueueConfiguration(): array
    {
        return [
            ...
            ShopThemeStorageConfig::SHOP_THEME_SYNC_STORAGE_QUEUE,
        ];
    }

```

### Apply Twig customization

[](#apply-twig-customization)

```
# src/Pyz/Yves/CheckoutPage/Theme/default/templates/page-layout-checkout/page-layout-checkout.twig

                    {% block logo %}

                            {% if findWidget('ShopThemeWidget') %}
                                {% set shopThemeWidget = findWidget('ShopThemeWidget') %}
                            {% endif %}

                            {% include molecule('logo') with {
                                attributes: {
                                    src: shopThemeWidget.data.logoUrl ?? null,
                                },
                            } only %}

                    {% endblock %}

#src/Pyz/Yves/ShopUi/Theme/default/components/organisms/header/header.twig

                 {% block logo %}
                     {% include molecule('logo') with {
                         class: 'col ' ~  config.name ~ '__logo',
                         modifiers: ['main'],
                     } only %}
                 {% endblock %}

#src/Pyz/Yves/ShopUi/Theme/default/templates/page-layout-main/page-layout-main.twig

{% block headStyles %}
    {{ parent() }}

    {% if findWidget('ShopThemeWidget') %}
        {% widget 'ShopThemeWidget' only %}{% endwidget %}
    {% endif %}
{% endblock %}
...
{% block body %}

    {% if findWidget('ShopThemeWidget') %}
        {% set shopThemeWidget = findWidget('ShopThemeWidget') %}
    {% endif %}
    ...
                 {% block logo %}
                     {% include molecule('logo') with {
                         class: 'col ' ~  config.name ~ '__logo',
                         modifiers: ['main'],
                         attributes: {
                             src: embed.logoSrc,
                         }
                     } only %}
                 {% endblock %}

#src/Pyz/Zed/Gui/Presentation/Partials/menu.twig

{%- macro leaf(node, depth=0) -%}
    {%- import _self as menu -%}

    {%- if node is defined %}
        {%- if menu_highlight is defined -%}
            {%- if menu_highlight == node.uri -%}

            {%- else -%}

            {%- endif -%}
        {%- else-%}

        {%- endif -%}

            {{ menu.getNodeIcon(node) }}
            {{ node.label | trans }}

    {% endif -%}
{%- endmacro -%}

{%- macro branch(node, depth=0) -%}
    {%- import _self as menu -%}

    {%- if node is defined %}

                {{ menu.getNodeIcon(node) }}
                {{ node.label | trans }}

                {{ menu.tree(node.children, (depth + 1)) }}

    {% endif -%}
{%- endmacro -%}

{%- macro tree(root) -%}
    {%- import _self as menu -%}

    {%- for child in root -%}
        {%- if child.children is defined and child.children is not empty -%}
            {{ menu.branch(child, 0) }}
        {%- else -%}
            {{ menu.leaf(child, 0) }}
        {%- endif -%}
    {%- endfor -%}
{%- endmacro -%}

{%- macro getNodeIcon(node) -%}
    {%- set defaultIcon = 'fa-angle-double-right' -%}
    {%- if node.icon is defined and node.icon != '' -%}

    {%- else -%}

    {%- endif -%}
{%- endmacro -%}

{%- import _self as menu -%}

                    {{ backofficeLogo() }}

                        {{ 'Logout' | trans }}

                    SP

            {{ menu.tree(navigation.menu) }}

#src/Pyz/Zed/SecurityGui/Presentation/Layout/layout.twig

     {% block head_title %}{% if title is defined %}{{ title | trans }}{% endif %}{% endblock %}

     {% block head_css %}

     {% endblock %}

         {{ backofficeLogo('login__logo') }}

         {% include '@Messenger/Partials/flash-messages.twig' %}

             {% block login_heading %}

                     {{ 'Login' | trans }}

             {% endblock %}

                 {% block content %}{% endblock %}

 {% block footer_js %}

 {% endblock %}

 #src/Pyz/Zed/ZedUi/Presentation/Layout/merchant-layout-centered.twig

 {% extends '@ZedUi/Layout/merchant-layout.twig' %}

 {% block body %}
    {{ mpLogo() }}

        {% block content %}{% endblock %}

        {% block footer %}
            Copyright Spryker Systems GmbH © {{ 'now' | date('Y') }}
        {% endblock %}

 {% endblock %}

 #src/Pyz/Zed/ZedUi/Presentation/Layout/merchant-layout-main.twig

 {% extends '@ZedUi/Layout/merchant-layout.twig' %}

 {% block body %}
    {{ mpLogo() }}
    {% if app.twig.getFunction('navigation') != false %}
        {% set navigationConfig = render_navigation_component_config(navigation('main').menu) %}
        {% set userMenuNavigationItems = navigation('secondary').menu %}

        {% block merchantLayoutMain %}

                {% block logo %}

                {% endblock %}

                {% block header %}

                        {% block headerMenu %}

                                {% block infoPrimary %}
                                    {% if username is not empty %}
                                        {{ username }}
                                    {% endif %}
                                {% endblock %}

                                {% block infoSecondary %}
                                    {% if userEmail is not empty %}
                                        {{ userEmail }}
                                    {% endif %}
                                {% endblock %}

                                {% block userMenuList %}
                                    {% for userMenuNavigationItem in userMenuNavigationItems %}
                                        {% block userMenuLink %}

                                                {% block userMenuLinkInner %}
                                                    {{ userMenuNavigationItem.title }}
                                                {% endblock %}

                                        {% endblock %}
                                    {% endfor %}

                                    {% block logoutLink %}

                                            {% block logoutLinkInner %}
                                                {{ 'Logout' | trans }}
                                            {% endblock %}

                                    {% endblock %}
                                {% endblock %}

                        {% endblock %}

                {% endblock %}

                {% block flashMessages %}
                    {% include '@ZedUi/Partials/FlashMessages/flash-messages.twig' %}
                {% endblock %}

                {% block content %}{% endblock %}

        {% endblock %}
    {% endif %}
 {% endblock %}

```

### Add behaviors to the database definition schemas

[](#add-behaviors-to-the-database-definition-schemas)

```
#src/Pyz/Zed/ShopTheme/Persistence/Propel/Schema/spy_shop_theme.schema.xml

```

###  Health Score

30

—

LowBetter than 62% of packages

Maintenance57

Moderate activity, may be stable

Popularity0

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 66.7% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

282d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/c6756c39a921146991fee6b4090f4130af143ee3aa7a776b688365c5f3d5b511?d=identicon)[spryker\_solution\_consulting\_demos](/maintainers/spryker_solution_consulting_demos)

---

Top Contributors

[![geronica](https://avatars.githubusercontent.com/u/86779768?v=4)](https://github.com/geronica "geronica (6 commits)")[![asaulenko](https://avatars.githubusercontent.com/u/20285714?v=4)](https://github.com/asaulenko "asaulenko (1 commits)")[![devvent](https://avatars.githubusercontent.com/u/4672959?v=4)](https://github.com/devvent "devvent (1 commits)")[![VorontsovSA](https://avatars.githubusercontent.com/u/1193458?v=4)](https://github.com/VorontsovSA "VorontsovSA (1 commits)")

### Embed Badge

![Health badge](/badges/spryker-demo-shop-theme-feature/health.svg)

```
[![Health](https://phpackages.com/badges/spryker-demo-shop-theme-feature/health.svg)](https://phpackages.com/packages/spryker-demo-shop-theme-feature)
```

###  Alternatives

[limenius/react-bundle

Client and Server-side react rendering in a Symfony Bundle

3851.2M](/packages/limenius-react-bundle)[ktquez/laravel-tinymce

TinyMCE editor for Laravel and Lumen Framework

2525.4k](/packages/ktquez-laravel-tinymce)[jelix/wikirenderer

WikiRenderer is a library to generate HTML or anything else from wiki content.

1712.3k1](/packages/jelix-wikirenderer)[webkinder/sproutset

A Composer package for handling responsive images in Roots Bedrock + Sage + Blade projects.

282.2k](/packages/webkinder-sproutset)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
