PHPackages                             spryker-demo/subscription-product-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. [Utility &amp; Helpers](/categories/utility)
4. /
5. spryker-demo/subscription-product-feature

ActiveMetapackage[Utility &amp; Helpers](/categories/utility)

spryker-demo/subscription-product-feature
=========================================

Subscription product \[feature\]

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

Since Sep 25Pushed 9mo agoCompare

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

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

Spryker Demo Subscription Product Feature
=========================================

[](#spryker-demo-subscription-product-feature)

[![Latest Stable Version](https://camo.githubusercontent.com/c16deebf062ac023ecea9ec5afd5432b6f47efb8c36e2eefc0fa0c42b111ea7f/68747470733a2f2f706f7365722e707567782e6f72672f737072796b65722d64656d6f2f696d706f72742d70726f636573732d6775692f762f737461626c652e737667)](https://packagist.org/packages/spryker-demo/subscription-product-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-subscription-product-feature path './demo-vendor/subscription-product-feature'
composer config repositories.spryker-demo-subscription-product-oms path './demo-vendor/subscription-product-oms'
composer config repositories.spryker-demo-subscription-product-page path './demo-vendor/subscription-product-page'

```

### Install feature

[](#install-feature)

```
composer require spryker-demo/subscription-product-feature

```

### Add `SprykerDemo` namespace to configuration

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

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

```

### Wire the router provider plugin

[](#wire-the-router-provider-plugin)

```
# src/Pyz/Yves/Router/RouterDependencyProvider.php

use SprykerDemo\Yves\SubscriptionProductPage\Plugin\Router\SubscriptionProductPageRouteProviderPlugin;
...

protected function getRouteProvider(): array
{
    return [
        ...
        new SubscriptionProductPageRouteProviderPlugin(),
    ];
}

```

### Wire the oms command and conditions plugin

[](#wire-the-oms-command-and-conditions-plugin)

```
# src/Pyz/Zed/Oms/OmsDependencyProvider.php

use SprykerDemo\Zed\SubscriptionProductOms\Communication\Plugin\Oms\Command\SendCanceledSubscriptionNotificationPlugin;
use SprykerDemo\Zed\SubscriptionProductOms\Communication\Plugin\Oms\Condition\IsPaymentReminderLimitReachedPlugin;
use SprykerDemo\Zed\SubscriptionProductOms\Communication\Plugin\Oms\Condition\IsSubscriptionPlugin;

// ...

protected function extendCommandPlugins(Container $container): Container
{
    $container->extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) {
        $commandCollection->add(new SendCanceledSubscriptionNotificationPlugin(), 'Subscription/SendCanceledSubscriptionNotification');

        return $commandCollection;
});

// ...

protected function extendConditionPlugins(Container $container): Container
{
    $container->extend(self::CONDITION_PLUGINS, function (ConditionCollectionInterface $conditionCollection) {
        $conditionCollection->add(new IsPaymentReminderLimitReachedPlugin(), 'Subscription/isSubscriptionInvoiceIntervalReached');
        $conditionCollection->add(new IsSubscriptionPlugin(), 'Subscription/IsSubscription');

        return $conditionCollection;
    });

    return $container;
}

```

### Adjust OMS configuration file

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

```
# if installed using demo-packages repo
cp vendor/spryker-demo/packages/Bundles/SubscriptionProductOms/config/Zed/oms/SubscriptionSubprocess/DummySubscription01.xml config/Zed/oms/SubscriptionSubprocess/DummySubscription01.xml
# if installed using feature repo
cp vendor/spryker-demo/subscription-product-oms/config/Zed/oms/SubscriptionSubprocess/DummySubscription01.xml config/Zed/oms/SubscriptionSubprocess/DummySubscription01.xml

```

```
# config/Zed/oms/DummyPayment01.xml

            ...
            Subscription

        ...

```

### Add translations

[](#add-translations)

```
# data/import/common/common/glossary.csv

product.cancel_subscription.success_message,Das Abonnement für Produkt %product% wurde erfolgreich gekündigt,de_DE
product.cancel_subscription.success_message,Subscription for product %product% has been successfully canceled,en_US
product.cancel_subscription.error_message,Das Abonnement für diesen Bestellartikel kann nicht gekündigt werden!,de_DE
product.cancel_subscription.error_message,Can't cancel subscription for this order item!,en_US
product.cancel_subscription.warning_message,Abonnement bereits gekündigt!,de_DE
product.cancel_subscription.warning_message,Subscription already cancelled!,en_US
oms.state.subscription-active,Abonnement aktiv,de_DE
oms.state.subscription-active,Subscription Active,en_US
oms.state.subscription-cancelled,Abonnement gekündigt,de_DE
oms.state.subscription-cancelled,Subscription Cancelled,en_US
customer.account.subscriptions,Abonnements,de_DE
customer.account.subscriptions,Subscriptions,en_US
product.subscription.subscription_id,Referenz,de_DE
product.subscription.subscription_id,Reference,en_US
product.subscription.interval,Intervall,de_DE
product.subscription.interval,Interval,en_US
product.subscription.date,Datum,de_DE
product.subscription.date,Date,en_US
product.subscription.total,Summe,de_DE
product.subscription.total,Total,en_US
product.subscription.item_state,Stand,de_DE
product.subscription.item_state,State,en_US
product.subscription.item_name,Artikelname,de_DE
product.subscription.item_name,Name,en_US
product.subscription.actions,Actions,en_US
product.subscription.actions,Aktion,de_DE
customer.account.no_subscriptions,Derzeit keine Abonnements,de_DE
customer.account.no_subscriptions,No subscriptions at the moment,en_US

```

### Import translations

[](#import-translations)

```
console data:import:glossary

```

### Apply Twig customization

[](#apply-twig-customization)

#### B2C Marketplace

[](#b2c-marketplace)

```
# src/Pyz/Yves/CustomerPage/Theme/default/components/molecules/customer-navigation/customer-navigation.twig

{% block body %}

            {{ 'customer.account.subscriptions' | trans }}

```

#### B2B Marketplace

[](#b2b-marketplace)

```
# src/Pyz/Yves/ShopUi/Theme/default/components/molecules/user-navigation/user-navigation.twig

{% include molecule('navigation-list') with {
            modifiers: ['secondary'],
            class: config.name ~ '__sub-nav',
            data: {
                nodes: [
                // ...
                {
                    url: url('subscription-product'),
                    title: 'customer.account.subscriptions' | trans,
                },
                // ...
            ]},
        } only %}

```

```
# src/Pyz/Yves/CustomerPage/Theme/default/components/molecules/navigation-sidebar/navigation-sidebar.twig

{% define data = {
    items: [
        // ...

        {
            name: 'subscription',
            url: path('subscription-product'),
            label: 'customer.account.subscriptions' | trans,
            icon: 'subscribe',
        },

        // ...
    ]
} %}

```

### Install sample data (optional)

[](#install-sample-data-optional)

```
composer require spryker-demo/subscription-product-data-import

```

Sample data for the following entities is provided by the previous composer package:

#### product-attribute-key

[](#product-attribute-key)

- File: `vendor/spryker-demo/subscription-product-data-import/data/import/product_attribute_key.csv`
- Command: `console data:import:product-attribute-key`

#### product-management-attribute

[](#product-management-attribute)

- File: `vendor/spryker-demo/subscription-product-data-import/data/import/product_management_attribute.csv`
- Command: `console data:import:product-management-attribute`

#### product-abstract

[](#product-abstract)

- File: `vendor/spryker-demo/subscription-product-data-import/data/import/product_abstract.csv`
- Command: `console data:import:product-abstract`

#### product-concrete

[](#product-concrete)

- File: `vendor/spryker-demo/subscription-product-data-import/data/import/product_concrete.csv`
- Command: `console data:import:product-concrete`

#### product-image

[](#product-image)

- File: `vendor/spryker-demo/subscription-product-data-import/data/import/product_image.csv`
- Command: `console data:import:product-image`

#### product-price

[](#product-price)

- File: `vendor/spryker-demo/subscription-product-data-import/data/import/DE/product_price.csv`
- Command: `console data:import:product-price`

#### product-abstract-store

[](#product-abstract-store)

- File: `vendor/spryker-demo/subscription-product-data-import/data/import/DE/product_abstract_store.csv`
- Command: `console data:import:product-abstract-store`

#### product-stock

[](#product-stock)

- File: `vendor/spryker-demo/subscription-product-data-import/data/import/product_stock.csv`
- Command: `console data:import:product-stock`

#### merchant-product

[](#merchant-product)

- File: `vendor/spryker-demo/subscription-product-data-import/data/import/merchant_product.csv`
- Command: `console data:import:merchant-product`

#### product-approval-status

[](#product-approval-status)

- File: `vendor/spryker-demo/subscription-product-data-import/data/import/product_abstract_approval_status.csv`
- Command: `console data:import:product-approval-status`

#### product-price-merchant-relationship (only if installed in a marketplace scenario)

[](#product-price-merchant-relationship-only-if-installed-in-a-marketplace-scenario)

- File: `vendor/spryker-demo/subscription-product-data-import/data/import/DE/price_product_merchant_relationship.csv`
- Command: `console data:import:product-price-merchant-relationship`

###  Health Score

30

—

LowBetter than 62% of packages

Maintenance57

Moderate activity, may be stable

Popularity0

Limited adoption so far

Community8

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

[![asaulenko](https://avatars.githubusercontent.com/u/20285714?v=4)](https://github.com/asaulenko "asaulenko (2 commits)")[![amansilla](https://avatars.githubusercontent.com/u/1576983?v=4)](https://github.com/amansilla "amansilla (1 commits)")

### Embed Badge

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

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

###  Alternatives

[joshrainwater/active-users

A Laravel Package for easily retrieving a list of active users and guests that are currently online.

9119.9k](/packages/joshrainwater-active-users)[facile-it/facile-coding-standard

Facile.it coding standard

10326.2k33](/packages/facile-it-facile-coding-standard)

PHPackages © 2026

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