cyllene-digital / sylius-advanced-taxon-plugin
Turns Sylius taxons into merchandising pages: branding, featured content, media zones, universe pages, advanced filters, conditional taxons and a mega menu.
Package info
github.com/CylleneDigital/SyliusAdvancedTaxonPlugin
Type:sylius-plugin
pkg:composer/cyllene-digital/sylius-advanced-taxon-plugin
Requires
- php: ^8.3
- ext-gd: *
- doctrine/collections: ^2.0
- doctrine/dbal: ^3.0 || ^4.0
- doctrine/doctrine-bundle: ^2.13 || ^3.1
- doctrine/doctrine-migrations-bundle: ^3.7
- doctrine/migrations: ^3.6
- doctrine/orm: ^2.20 || ^3.6
- liip/imagine-bundle: ^2.15
- sylius/sylius: ^2.1
- sylius/twig-hooks: ^0.8 || ^0.9 || ^0.12 || ^0.14
- symfony/config: ^7.4 || ^8.0
- symfony/console: ^7.4 || ^8.0
- symfony/dependency-injection: ^7.4 || ^8.0
- symfony/form: ^7.4 || ^8.0
- symfony/http-foundation: ^7.4 || ^8.0
- symfony/http-kernel: ^7.4 || ^8.0
- symfony/messenger: ^7.4 || ^8.0
- symfony/options-resolver: ^7.4 || ^8.0
- symfony/routing: ^7.4 || ^8.0
- symfony/security-csrf: ^7.4 || ^8.0
- symfony/security-http: ^7.4 || ^8.0
- symfony/service-contracts: ^3.5
- symfony/translation-contracts: ^3.5
- symfony/ux-autocomplete: ^2.36 || ^3.0
- symfony/ux-icons: ^2.36 || ^3.0
- symfony/validator: ^7.4 || ^8.0
- twig/twig: ^3.10
Requires (Dev)
- behat/behat: ^3.22 || ^4.0
- behat/mink: ^1.11
- behat/mink-browserkit-driver: ^2.2
- dbrekelmans/bdi: ^1.4
- dmore/chrome-mink-driver: ^2.9
- friends-of-behat/mink-debug-extension: ^2.1
- friends-of-behat/mink-extension: ^2.7 || ^3.0@alpha
- friends-of-behat/page-object-extension: ^0.4
- friends-of-behat/suite-settings-extension: ^1.1
- friends-of-behat/symfony-extension: ^2.6.2
- friends-of-behat/variadic-extension: ^1.7
- phpstan/phpstan: ^2.2
- phpstan/phpstan-doctrine: ^2.0
- phpstan/phpstan-webmozart-assert: ^2.0
- phpunit/phpunit: ^10.5
- sylius-labs/behat-chrome-extension: ^1.5
- sylius-labs/coding-standard: ^4.4
- sylius-labs/suite-tags-extension: ~0.2
- sylius/test-application: ~2.1.0@alpha || ~2.2.0@alpha || ~2.3.0@alpha
- symfony/browser-kit: ^7.4 || ^8.0
- symfony/debug-bundle: ^7.4 || ^8.0
- symfony/dotenv: ^7.4 || ^8.0
- symfony/runtime: ^7.4 || ^8.0
- symfony/ux-twig-component: ^2.36 || >=3.0 <3.5
- symfony/web-profiler-bundle: ^7.4 || ^8.0
- symfony/webpack-encore-bundle: ^2.2
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-10-07 11:55:48 UTC
README
Sylius Advanced Taxon Plugin
Open-source Sylius 2 plugin that turns taxons into editorial and merchandising pages, configured per taxon from the back office:
- branding: color, icon or pictogram, shown in the menu, on the taxon page and in the breadcrumbs;
- featured content: featured child taxons and featured products, as a grid or a slider, before or after the filters;
- media zones around and inside the product list, with links, translated texts and placement modes;
- universe pages: a showcase layout (hero slider, introduction, children, featured products) instead of a product list;
- advanced filters: facets on attributes, options, sub-taxons and price, with their counts, on the native Sylius product grid, children products included on demand;
- conditional taxons: products assigned from conditions (attribute, option, name, description, stock, taxon membership), previewed in the back office and kept up to date;
- a mega menu, enabled per channel, and a drill-down mobile menu.
The complete list: features.
Compatibility
| Component | Versions |
|---|---|
| PHP | ^8.3 (Symfony 8: ^8.4) |
| Sylius | 2.1, 2.2, 2.3 |
| Symfony | ^7.4, or ^8.0 with Sylius 2.3 |
| Extensions and bundles | ext-gd, LiipImagineBundle, Symfony UX Autocomplete and UX Icons, Symfony Messenger, Sylius Twig Hooks |
What this plugin does not do
- It never replaces a Sylius model: your
Taxon,ChannelandTaxonImageentities use the traits and interfaces it ships. - Facets and conditions are SQL queries, not a search engine index; they read text and select attributes only.
- Conditional taxons are materialized, not dynamic: products that start matching later are attached when the conditions change or when the synchronization command runs, which the application schedules.
- The native taxon Images section of the back office is replaced by the plugin media zones, the main image included; taxon images of another type (your theme's) are kept but not editable there.
The full list: what this plugin does not do.
Installation
composer config extra.symfony.allow-contrib true
composer require cyllene-digital/sylius-advanced-taxon-plugin
The Flex recipe (symfony/recipes-contrib) registers the bundle, imports its configuration (Twig
hooks) and its admin route, and prints the remaining steps:
- make your
Taxon,ChannelandTaxonImageentities useAdvancedTaxonTrait,MegaMenuChannelTraitandAdvancedTaxonImageTraitwith their interfaces, and declare them as the Sylius models; - run the migration:
bin/console doctrine:migrations:migrate; - import the plugin entrypoints from your
assets/admin/entrypoint.jsandassets/shop/entrypoint.js, then build your assets; - schedule
bin/console cyllene:advanced-taxon:sync-conditional-taxons.
Without Flex, and for every detail (entity examples, Messenger routing, verification): installation guide.
Configuration
Everything editorial is set per taxon in Catalog > Taxons, and the mega menu per channel. The
bundle configuration only adds icon libraries to the icon picker; the Tabler icons shipped by
Sylius are always available:
# config/packages/cyllene_digital_sylius_advanced_taxon.yaml cyllene_digital_sylius_advanced_taxon: icon_libraries: phosphor: label: 'Phosphor' icon_prefix: 'ph' icons: ['star', 'heart', 'tree-evergreen']
Liip Imagine filter sets, Messenger routing and the shop product grid: configuration reference.
In production
- Taxon pages list products through the Sylius shop product grid. Children products and advanced filters are added to the native grid query: pagination, sorting, search and channel restriction behave as in a standard Sylius shop.
- Route the synchronization message on a large catalog. Saving a taxon whose conditions changed
dispatches
CylleneDigital\SyliusAdvancedTaxonPlugin\Message\SynchronizeConditionalTaxon, handled synchronously unless routed to an asynchronous transport. - Schedule the synchronization command. It is what attaches products that start matching after the last change of conditions (new products, attribute or stock changes).
- Pictograms and media are Sylius images: stored by the Sylius image uploader (local, S3...) and served through Liip Imagine.
- Icons are local: the plugin templates only use Tabler icons, shipped by Sylius or by the plugin.
Import with
bin/console ux:icons:importthe icons of youricon_librariesthat merchants pick, so that they do not depend on Iconify at render time.
Troubleshooting
Nothing from the plugin shows up, the pages are unstyled, children products or filters are missing, or the synchronization does not run: see troubleshooting.
Upgrading
Upgrade the Composer package, run the migrations and rebuild your assets, then read UPGRADE.md. If your theme overrides a plugin template or one of the Sylius hooks the plugin replaces, compare it with the new version.
Public contract
The entity traits and interfaces, the Twig hooks and functions, the bundle configuration, the message, the command, the admin route and the database schema only change in a major version. The full list and the support policy: public contract.
Documentation
- Back-office guide: for merchants
- Theming and Twig hooks: for integrators
- Technical documentation: every page, by audience
Status
Tested by 198 PHPUnit tests (units; integration tests on a real database for every condition type and operator, the facets, the grid pagination and the synchronization; functional tests of the back office) and 47 Behat scenarios, 5 of them in headless Chrome (icon picker, media rows, conditions preview, save and refusal). Both suites pass on Sylius 2.1, 2.2 and 2.3; the PHPUnit suite also on PostgreSQL 17.
The continuous integration matrix covers Sylius 2.1, 2.2 and 2.3, PHP 8.3, 8.4 and 8.5, Symfony 7.4 and 8, on MySQL 8.0 and 8.4, MariaDB 10.11 and 11.4, and PostgreSQL 15 to 17, every Behat scenario included.
One limit comes from Sylius: with DBAL 4, its own migrations are skipped on a database declared as MariaDB (details).
Contributing
CONTRIBUTING.md: environment, checks run by the CI and conventions.
A security flaw is reported privately: SECURITY.md. Do not open it as a public issue.
Provenance and licence
The plugin is released under the MIT licence (see LICENSE). The icons in
assets/icons/ come from Tabler Icons (MIT, see assets/icons/LICENSE).
Package: cyllene-digital/sylius-advanced-taxon-plugin
Maintained by Cyllene, on GitHub as @CylleneDigital



