manuxi/sulu-glossary-bundle
A Sulu CMS bundle that adds glossary management to your site. Create and organize glossary terms with definitions, manage them through Sulu's admin interface, and render a searchable glossary on the frontend, making it easy to explain domain-specific terminology to visitors.
First, the framework reality check: despite being a Composer package, this is a Sulu 3 / Symfony bundle, not a Laravel package. There is no service provider auto-discovery, no Eloquent, no Blade, no php artisan. If your app is Laravel, this only makes sense as a separate Sulu-powered content application (or a headless Sulu instance you query over HTTP) — do not attempt to install it into a Laravel codebase.
Minimal steps in a Sulu 3 skeleton:
composer require the bundle, then register it in config/bundles.php and import its routing/config.docs/templates/doctrine-migration.php.dist (MySQL) before doctrine:migrations:migrate on any non-fresh install.sulu.glossary.entries and sulu.glossary.settings to your role or you'll get empty/403 views.title, explanation, description, image, link, plus the unlocalized type (abbreviation / acronym / term). Publish it (draft → live per locale).single_glossary_entry_selection content type, resolved in Twig with sulu_resolve_glossary_entry, or an overview page built with sulu_get_glossary_entries + load_glossary_settings.Where to look first: the English/German docs in docs/, then GlossaryEntryDimensionContent to understand which fields are localized, then the provider list (smart content, teaser, link, sitemap, route defaults) depending on which surface you're integrating.
glossary_entry_selection (multi-select) or single_glossary_entry_selection in your template XML. This is the primary authoring pattern — editors pick entries in the page form, you resolve UUIDs in the template.glossary_entry to load entries like any other Sulu resource; good for custom controllers and API-ish endpoints.glossary_entries; your overview controller receives entries from request attributes rather than querying the repository itself. Follow that pattern so sitemap/preview/cache providers keep working.load_glossary_settings exposes them.sulu_get_glossary_entries for lists, sulu_resolve_glossary_entry for a single UUID. The abbr filter (sulu_glossary.twig.auto_abbr) is the "auto-abbreviation" convenience — opt-in, apply narrowly.sulu:glossary:migrate-from-2x (data) then sulu:glossary:migrate-page-references (page references from SuluAbbreviationsBundle 2.0). Run against a snapshot; the reference migration assumes entities already exist.sulu/automation-bundle, publish/unpublish scheduling comes for free — no extra wiring on your side.admin and website, HTTP cache tagging/invalidation, reference refresher, and trash handler are all registered. You get correct purge-on-publish and reindex-on-change behaviour as long as your templates go through the provided providers/loaders rather than raw Doctrine queries.sulu_glossary.versioning.max_versions defaults to 20. Tune per environment.app(), no facades, no Blade directives, no php artisan vendor:publish. Configuration lives in Symfony config YAML; DI overrides are done by decorating services or replacing parameters.type is unlocalized. It lives on the entry, not the dimension content. Changing it changes every locale, and it will not appear where you expect if you're iterating dimension content fields.abbr filter rewrites text. It's a string filter; running it over rich HTML can produce broken markup or wrap text inside attributes. Restrict it to plain explanation/short fields and test with nested tags and existing <abbr> elements.sulu.glossary.entries first.max_versions: 0 means unlimited. Fine for low-volume glossaries, risky for heavily edited ones; watch the dimensions table growth.glossary_entries — a typo here yields an empty overview with no error, since the controller just receives nothing.How can I help you explore Laravel packages today?