Als de documentatie voor een nieuwe versie nog ontbreekt, blijft de broncode wel behouden. Dat is mij overkomen toen ik de SuluEventBundle naar Sulu 3 heb overgezet. Er verstreken veertien dagen tussen de eerste commit voor de conversie op 29 november 2025 en versie 3.0.0 op 13 december. Wat er daarvoor met de kalender is gebeurd, wordt beschreven in het vorige bericht.

Op dat moment was de Sulu-documentatie nog niet bijgewerkt naar versie 3. Er waren nauwelijks handleidingen beschikbaar over hoe je je eigen bundel kon aanpassen. In de Sulu Slack worden berichten slechts 90 dagen bewaard, dus oudere gesprekken zijn niet meer zichtbaar. Twee trefwoorden blijven over: DimensionContent en Doctrine, dat eindelijk PHPCR heeft vervangen. Al het andere moest ik in de broncode opzoeken. AI was hierbij erg behulpzaam.

Wat verandert er in Sulu 3?

In Sulu 2 werden pagina’s opgeslagen in de PHPCR-inhoudsdatabase, terwijl aangepaste inhoud, zoals evenementen, werd opgeslagen in Doctrine-tabellen. Ik moest alles wat pagina’s kunnen, vanzelfsprekend ook voor evenementen opnieuw opzetten: talen, SEO, uittreksels, auteurs. In Sulu 3 is Doctrine verantwoordelijk voor alle content, en daarvoor bestaat een gemeenschappelijk model.

De content bestaat daar uit twee delen. Voor mij is de wrapper de Event-klasse. Deze bevat de ID en de koppelingen naar herhalings- en sociale instellingen. De daadwerkelijke inhoud wordt opgeslagen in DimensionContent-vermeldingen. Elke vermelding bevat de inhoud voor een specifieke taal in een bepaalde status (concept of live) en versie.

4 december

Op 4 december werd de refactoring geïmplementeerd in DimensionContent. De commit had betrekking op 61 bestanden; er werden 3.740 regels toegevoegd en 3.862 verwijderd.

De vertaalentiteiten en de speciale tabellen voor SEO en uittreksels zijn verdwenen, evenals de drie modelklassen die ik op 30 maart 2021 had geïntroduceerd, en een klasse van 435 regels die lijsten voor het beheerderspaneel genereerde. De klasse Event telt nu 79 regels. Deze is vervangen door EventDimensionContent.

Er is één klein detail dat ik hier bijzonder leuk vind. De bouwstenen die ik in 2021 zelf had gebouwd met behulp van interfaces en traits – namelijk SEO, Excerpt en Author – zijn nu opgenomen in Sulu 3 zelf. De nieuwe klasse integreert ze vanuit Sulu als SeoTrait, ExcerptTrait en AuthorTrait.

Bestelling in december

  • 29 november: MassiveSearch verwijderd
  • 1 december: Lijsten, formulieren, Smart Content en selectievelden werken
  • 2 december: Zoeken in de beheerdersomgeving werkt
  • 4 december: De migratie naar DimensionContent begint
  • 8 december: Functies voor opslaan en voorbeeld bekijken werken; locaties werken
  • 9 december: SEO en uittreksel worden opgeslagen; de lijst toont de publicatiestatus; linkprovider
  • 10 december: Sitemap-provider
  • 11 december: Referenties, SuluSharedTools verwijderd
  • 13 december: Versie 3.0.0

Ik heb op zowel 1 als 9 december gemeld dat Smart Content operationeel was. De migratie naar DimensionContent vond tussendoor plaats.

Vanaf versie 3.0.0

Het werk was met de eerste versie nog niet af. Tot 14 januari volgden er nog tien herziene versies: 3.0.1 tot en met 3.0.10.

Twee struikelblokken zijn me bijgebleven. De inhoud van een gebeurtenis moest via eager loading worden geladen. Dit kwam op 23 december aan het licht en opnieuw op 14 januari. Dan was er nog Sulu 3.0.1: op 31 december heb ik een fix voor Sulu 3.0.1 teruggedraaid en de hardgecodeerde afhankelijkheid van Sulu 3.0.0 verwijderd; op 6 januari draaide de bundel met Sulu 3.0.1.

Op 24 januari werd de teaser-provider toegevoegd met versie 3.1.0.

Een tip voor je eigen renovatie

Wie met dezelfde reorganisatie te maken krijgt, vindt de referentie in de broncode van Sulu zelf: het pakket vendor/sulu/sulu/packages/content bevat de modellen, traits en interfaces waarop alles is gebouwd. Ik heb dit als leidraad gebruikt. De Sulu-2-tak van EventBundle bestaat nog steeds, maar ik heb de ontwikkeling ervan niet voortgezet – ik heb er simpelweg geen tijd voor.

Eerder: Kalenders, terugkerende gebeurtenissen en iCal in de SuluEventBundle. Volgende: AI-assistenten en evenementen: de MCP-tools in SuluEventBundle. De serie begint met Hoe de SuluEventBundle tot stand kwam.

Repository: manuxi/SuluEventBundle op GitHub