tenbruggencate / productencyclopedia-lite
Shopware 6 product encyclopedia: two-tier educational content (browse grid + deep profiles) linked to products, server-rendered.
Package info
bitbucket.org/Bruggencate/sw-plugin-productencyclopedia-lite
Type:shopware-platform-plugin
pkg:composer/tenbruggencate/productencyclopedia-lite
Requires
- php: >=8.1
- shopware/core: ~6.7
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.94
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^11.0
- shopware/storefront: ~6.7
This package is not auto-updated.
Last update: 2026-06-28 12:12:52 UTC
README
Product Encyclopedia Lite
![]()
Structured educational content pages linked to products, for Shopware 6. Two-tier index pattern: a lightweight browse grid that grows fast + a curated deep-profile registry that grows slowly. Generalised from a stone-encyclopedia reference implementation.
License: MIT ยท Shopware: 6.7.x ยท PHP: 8.1 / 8.2
๐ฌ๐ง English ยท ๐ณ๐ฑ Nederlands ยท ๐ฉ๐ช Deutsch
Lite tier โ and what's coming in Pro
Product Encyclopedia Lite (this package, tenbruggencate/productencyclopedia-lite) is the free tier of the Product Encyclopedia family. It handles the foundation: structured educational content pages (browse grid + deep profiles) linked to products, server-rendered Twig templates, per-sales-channel config and the registry pattern you extend from your hosting project. If you need "give a content-heavy catalog a real encyclopedia layer", Lite is the whole answer.
Product Encyclopedia Pro (coming as tenbruggencate/productencyclopedia-pro, distributed via the Shopware Store) will layer on the editorial + scale features that the Lite tier deliberately leaves out:
- Rich CMS blocks โ video embeds, comparison tables, glossary entries and interactive learning blocks ready to drop into profile content sections from the Shopware admin
- Bulk content import / export โ manage encyclopedia entries as a CSV / JSON dataset instead of as PHP registry subclasses
- Multi-language sync helper โ keep nl-NL / en-GB / de-DE profile content in lock-step without copy-pasting between locale registries
- Related-product algorithm โ automatic, scored recommendations linking profile pages to product detail pages by shared attributes, tags and content overlap
Pro is on the roadmap, not yet released. Lite alone is production-ready for the "structured educational content + product cross-linking" use case and stays free.
Screenshots
Encyclopedia index โ desktop, browse grid |
Encyclopedia profile โ Amethist deep page |
Encyclopedia index โ mobile (responsive) |
|
What it does
Content-heavy catalogs (wines, stones, spices, knives) need two kinds of pages that are both educational and both link to products โ but they shouldn't grow at the same rate:
- A fast-growing browse grid where every new SKU can appear immediately with a title + thumbnail + one-liner
- A slow-growing deep-profile registry where a handful of curated items get real editorial content (origins, how-to-use, care, history)
Most content plugins force you to pick one. This plugin ships both tiers, linked by slug, so you can add items to the browse grid the day they're in stock and invest in deep profiles at your own pace.
Install
Product Encyclopedia Lite is free and distributable via Composer / Packagist or via the Shopware Store.
composer require tenbruggencate/productencyclopedia-lite
bin/console plugin:refresh
bin/console plugin:install --activate TenBruggencateProductEncyclopedia
bin/console cache:clear
The plugin class name stays TenBruggencateProductEncyclopedia (grandfathered from v1.x โ only the composer package name changed in v2.0.0). If you're upgrading from v1.x see the v2.0.0 changelog entry for the one-line composer manifest update.
Two-tier design
BrowseIndex (lightweight tier)
| Purpose | fast-growing grid for browsing and discovery |
| Data per entry | slug, title, one filterable attribute value, one-liner description |
| Growth rate | fast โ new entries appear the moment they're in stock |
| Example | 40+ stones in a visual grid, filterable by colour |
ProfileRegistry (rich tier)
| Purpose | curated deep profiles with full editorial content |
| Data per entry | slug, title, description, image, multiple attribute groups, tags, ordered content sections |
| Growth rate | slow โ each entry is a real content commitment |
| Example | 10 stones with chakra/zodiac data, meaning, care instructions, experiments |
Browse entries have an optional profileSlug that links to a deep profile when one exists. The browse grid works standalone โ not every item needs a deep profile.
Configuration
In the Shopware admin under Settings โ System โ Plugins โ Product Encyclopedia Lite.
| Field | Default | Purpose |
|---|---|---|
enabled | true | Kill switch for all encyclopedia routes |
baseRoute | encyclopedia | URL prefix (display only โ actual paths are in route XML) |
itemLabel | Item | What entries are called (stone, wine, spice) |
itemLabelPlural | Items | Plural form |
filterAttribute | colour | Which attribute shows as filter pills on the browse grid |
Routes
| Route ID | Path | Controller |
|---|---|---|
product-encyclopedia.browse | /encyclopedia/browse | BrowseController::index |
product-encyclopedia.profile | /encyclopedia/{slug} | ProfileController::show |
product-encyclopedia.group | /encyclopedia/group/{group}/{value} | AttributeGroupController::show |
Populating with data
The plugin ships with empty registries. Extend ArrayProfileRegistry in your theme plugin:
final class MyStoneRegistry extends ArrayProfileRegistry
{
protected function buildItems(): array
{
return [
'amethyst' => new ProfileItem(
slug: 'amethyst',
title: 'Amethyst',
description: 'A purple variety of quartz.',
imageUrl: '/images/amethyst.jpg',
attributeGroups: [
['name' => 'chakra', 'values' => ['third-eye', 'crown']],
],
tags: ['calming', 'purple'],
contentSections: [
['heading' => 'Meaning', 'body' => 'Valued since antiquity...'],
],
),
];
}
}
Register your subclass in services.xml:
<service id="TenBruggencateProductEncyclopedia\Registry\ProfileRegistryInterface"
class="MyPlugin\Registry\MyStoneRegistry"/>
Standards
- Performance โ registries are in-memory arrays; zero DB queries for profile lookup. Browse grid uses server-side filtering (no JS framework, works without JavaScript).
- SEO โ every profile page emits structured
ArticleJSON-LD.meta_titleandmeta_descriptionare derived from the profile data and overridable per entry. Filter-pill URLs are crawlable as/encyclopedia/group/{attribute}/{value}(server-rendered, no#fragmentrouting). - GDPR โ stateless. No cookies, no tracking, no per-visitor data. Full data-flow documentation in
GDPR.md. - WCAG 2.2 AA โ semantic heading hierarchy (
h1โ profile title;h2โ content section headings); filter pills are<a>tags (keyboard + screen-reader accessible); focus state inherited from theme. Live axe-core audit output + localised-copy evidence:docs/ACCESSIBILITY.md. - Security โ all profile / browse data comes from PHP registries; no user-controllable input reaches templates or DB. No XSS surface.
- Uninstall โ
plugin:uninstall --keep-user-datapreserves everyTenBruggencateProductEncyclopedia.config.*row; without the flag the destructive path clears them all. No owned tables โ content comes from your hosting project's registries, not from this plugin.
Production-readiness checklist
A deliberately short list of things to verify before enabling the plugin on a customer-facing storefront. Not legal cover โ the MIT license already disclaims warranty โ but practical guidance an experienced operator would want anyway.
- [ ] Provide BrowseEntry + ProfileItem registries from your hosting project. This plugin defines the shape (interfaces, controllers, templates) but doesn't ship content โ your theme plugin or a content-only sibling registers the actual entries. With no registry wired in,
/encyclopedia/browserenders an empty grid and profile slugs return 404. Plan the content shape before flipping the install on prod. - [ ] Decide on your route prefix. Default routes are at
/encyclopedia/*, but most projects rebrand them to a domain-appropriate base (/stones/*,/wines/*,/spices/*). Configure the SEO URL templates in Shopware admin so the public URLs match your category nomenclature, not the generic plugin term. - [ ] Test profile-slug โ browse-entry linkage on staging. Browse cards optionally link to deep profiles via
profileSlug; a typo in either side silently breaks the cross-link without a 404 (the card just doesn't become a link). Render a few cards and confirm the ones with deep profiles do link out. - [ ] Run axe-core on a profile page before launch. The plugin's templates are WCAG-clean, but your theme's typography + colour-contrast applies once tokens are inherited โ the audit has to happen with your theme active, not against the plugin in isolation.
- [ ] Plan content cadence honestly. The two-tier model only pays off if browse entries grow fast and profiles grow slow. Shipping 20 cards with 0 deep profiles is fine; shipping 20 cards with 20 half-finished profiles is a maintenance burden visible to every visitor โ leave a slug empty rather than ship Lorem Ipsum.
Snippets
Ships with translations for nl-NL, en-GB, and de-DE. Override in your theme plugin's snippet JSON files using the product-encyclopedia.* key namespace.
Compatibility
Core platform
| Shopware | PHP | Status |
|---|---|---|
| 6.7.x โ tested against 6.7.8, 6.7.9 | 8.1, 8.2 | Stable |
| 6.6.x | โ | Not supported |
| 6.5.x and earlier | โ | Not supported |
Database
| Engine | Version | Notes |
|---|---|---|
| MySQL | 8.0+ | Primary target; JSON functions used for config-row manipulation in migrations |
| MariaDB | 10.11+ | Tested end-to-end; earlier versions lack some JSON operator support |
Browsers (storefront)
Evergreen browsers only โ the two most recent stable releases of each:
| Browser | Desktop | Mobile |
|---|---|---|
| Chrome / Chromium | โ | โ |
| Firefox | โ | โ |
| Safari | โ (macOS) | โ (iOS 16+) |
| Edge | โ | โ |
Internet Explorer and legacy Edge are not supported. The plugin emits no runtime JS (where applicable) so graceful degradation on older browsers usually still renders content, just without progressive enhancements.
Admin browsers
Same evergreen matrix โ the Shopware admin is Vue-based and has its own compatibility baseline that this plugin doesn't extend or narrow.
Development
| Tool | Version | Scope |
|---|---|---|
| PHP | โฅ 8.1 | Runtime + test suite |
| Composer | 2.x | Dependency management |
| Node.js | โฅ 18 | Only needed if you edit SCSS and re-run the theme compile |
| Python | โฅ 3.9 | Only needed for the repo's asset-pipeline scripts (scripts/*.py) |
Accessibility
WCAG 2.2 level A + AA โ see docs/ACCESSIBILITY.md for axe-core audit output and per-page violations.
What we test before each release
- Full PHPUnit unit suite against PHP 8.1 + 8.2 (source-inspection tests don't need a kernel)
- PHPStan level 8 + PHP-CS-Fixer (@PSR12 + @Symfony)
- Composer validate on every plugin
- Live-DB smoke tests (plugin install โ activate โ route render โ uninstall cycle)
- axe-core audit on the primary storefront surfaces (see ACCESSIBILITY.md)
Related plugins
Sibling plugins from the same publisher:
- TenBruggencateMultiBrand โ when active, profiles render with per-brand
--brand-*tokens so the same encyclopedia looks distinct across brand domains - TenBruggencateAnalytics โ profile views and filter-pill clicks are tracked as custom events when Analytics is active
- TenBruggencateNewsletterLite โ GDPR-safe newsletter signup with double opt-in
- TenBruggencateMaintenance โ branded maintenance page with HTTP 503 + Retry-After
- TenBruggencateLegalPages โ drop-in legal templates with merge fields
Support
- Email: guy@tenbruggencatedevelopment.nl
- Docs & news: tenbruggencatedevelopment.nl
- Source / issues: Bitbucket repo
- Security vulnerabilities: see
SECURITY.mdโ email first, no public issues, 72-hour acknowledgement SLA
License
MIT ยฉ Ten Bruggencate Development
More from Ten Bruggencate Development
Focused, privacy-first Shopware 6 plugins โ free to start, upgrade when you grow:
- Newsletter โ Lite: GDPR-safe signup & subscriber-list management ยท Pro: campaigns, lifecycle automations, native-data segmentation
- Legal Pages โ Lite: localized legal-page templates ยท Pro: the compliance toolkit (maintained templates, cookie policy, accessibility statement)
- Analytics โ multi-backend (Matomo / Plausible), GDPR-first, cookieless-capable
- Maintenance โ a branded, SEO-correct maintenance page
- Multi-Brand โ serve multiple brands from one Shopware, by hostname
- Product Encyclopedia โ Lite: structured educational content pages (browse grid + deep profiles) linked to products ยท Pro (coming): rich CMS blocks (video, comparison tables, glossary, interactive learning), bulk content I/O, multi-language sync helper, related-product algorithm
- Seasons โ scheduled theme-config variants