PHPackages                             spryker-demo/frontend-configurator-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. spryker-demo/frontend-configurator-feature

ActiveMetapackage

spryker-demo/frontend-configurator-feature
==========================================

Frontend configurator \[feature\]

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

Since Sep 25Pushed 7mo agoCompare

[ Source](https://github.com/spryker-demo/frontend-configurator-feature)[ Packagist](https://packagist.org/packages/spryker-demo/frontend-configurator-feature)[ RSS](/packages/spryker-demo-frontend-configurator-feature/feed)WikiDiscussions main Synced 1mo ago

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

Spryker Demo Frontend Configurator Feature
==========================================

[](#spryker-demo-frontend-configurator-feature)

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

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

[](#installation)

### Add repositories to composer as they are not registered in packagist.org

[](#add-repositories-to-composer-as-they-are-not-registered-in-packagistorg)

```
composer config repositories.spryker-demo-frontend-configurator-feature path './demo-vendor/frontend-configurator-feature'
composer config repositories.spryker-demo-frontend-configurator path './demo-vendor/frontend-configurator'
composer config repositories.spryker-demo-frontend-configurator-gui path './demo-vendor/frontend-configurator-gui'
composer config repositories.spryker-demo-frontend-configurator-storage path './demo-vendor/frontend-configurator-storage'
composer config repositories.spryker-demo-frontend-configurator-widget path './demo-vendor/frontend-configurator-widget'

```

### Install feature

[](#install-feature)

```
composer require spryker-demo/frontend-configurator-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',
    ],
    ...
];

```

### 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 Spryker\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 publisher plugins

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

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

use SprykerDemo\Zed\FrontendConfiguratorStorage\Communication\Plugin\Publisher\FrontendConfigurator\FrontendConfiguratorStoragePublisherPlugin;
use SprykerDemo\Zed\FrontendConfiguratorStorage\Communication\Plugin\Publisher\FrontendConfiguratorPublisherTriggerPlugin;

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

    public function getFrontendConfiguratorStoragePlugins(): array
    {
        return [
            new FrontendConfiguratorStoragePublisherPlugin(),
        ];
    }

```

### 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\FrontendConfiguratorStorage\FrontendConfiguratorStorageConfig;

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

```

### Wire the synchronization plugin

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

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

use SprykerDemo\Zed\FrontendConfiguratorStorage\Communication\Plugin\Synchronization\FrontendConfiguratorSynchronizationDataPlugin;

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

```

### Wire the twig extension plugin

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

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

use SprykerDemo\Zed\FrontendConfiguratorGui\Communication\Plugin\Twig\Buttons\Form\BackofficeLogoTwigExtensionPlugin;

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

```

### Adjust navigation configuration file

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

```
# config/Zed/navigation.xml

            ...

                Frontend configurator Gui
                Frontend configurator Gui
                frontend-configurator-gui
                index
                edit

```

### Adjust RabbitMq configuration

[](#adjust-rabbitmq-configuration)

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

use SprykerDemo\Zed\FrontendConfiguratorStorage\FrontendConfiguratorStorageConfig;
...

protected function getPyzSynchronizationQueueConfiguration(): array
    {
        return [
            ...
            FrontendConfiguratorStorageConfig::FRONTEND_CONFIGURATOR_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('FrontendConfiguratorWidget') %}
                                {% set frontendConfiguratorWidget = findWidget('FrontendConfiguratorWidget') %}
                            {% endif %}

                            {% include molecule('logo') with {
                                attributes: {
                                    src: frontendConfiguratorWidget.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('FrontendConfiguratorWidget') %}
        {% widget 'FrontendConfiguratorWidget' only %}{% endwidget %}
    {% endif %}
{% endblock %}
...
{% block body %}

    {% if findWidget('FrontendConfiguratorWidget') %}
        {% set frontendConfiguratorWidget = findWidget('FrontendConfiguratorWidget') %}
    {% 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/Gui/Presentation/Partials/backoffice-logo.twig

{% if not backofficeLogoUrl is empty %}

         .zed-logo {
             background: center/contain no-repeat url("{{ backofficeLogoUrl }}");
         }

 {% endif %}

#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 %}

```

### Add behaviors to the database definition schemas

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

```
#src/Pyz/Zed/FrontendConfigurator/Persistence/Propel/Schema/spy_frontend_configurator.schema.xml

```

###  Health Score

32

—

LowBetter than 72% of packages

Maintenance63

Regular maintenance activity

Popularity0

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 71.4% 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

229d ago

### Community

Maintainers

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

---

Top Contributors

[![kraal-spryker](https://avatars.githubusercontent.com/u/42177964?v=4)](https://github.com/kraal-spryker "kraal-spryker (5 commits)")[![asaulenko](https://avatars.githubusercontent.com/u/20285714?v=4)](https://github.com/asaulenko "asaulenko (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-frontend-configurator-feature/health.svg)

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

PHPackages © 2026

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