Ik wilde Sulu eerst eens goed onder de loep nemen voordat ik ermee aan de slag ging. Ik was vooral benieuwd hoe goed mijn eigen ontwikkelingen konden worden geïntegreerd: uitbreidingen die zich binnen het beheerderspaneel, in het rechtenbeheer en op de website gedragen alsof ze deel uitmaken van Sulu. Evenementen bleken hiervoor een goede testcase te zijn. Een evenement heeft inhoud, data, afbeeldingen, een locatie en een openbare pagina, en dit raakt al snel aan veel onderdelen van het systeem.
Sulu heeft me in dit opzicht overtuigd. De concepten zijn duidelijk gescheiden, logisch gestructureerd en gemakkelijk te volgen, net als bij Symfony, waarop Sulu is gebouwd. Zodra je begrijpt hoe het ene onderdeel werkt, vind je snel je weg in het volgende. Daarom gebruik ik Sulu. Ik ben rond 2020 begonnen en de openbare repository op GitHub is sinds maart 2021 beschikbaar.
De eerste stappen in de ontwikkeling vergden echter veel gedetailleerd werk. Ik heb me door de Sulu-documentatie, Slack, de workshop en de demosite gewerkt. Elke bron leverde een stukje van de puzzel; ik moest het hele plaatje zelf in elkaar puzzelen, en er was op dat moment nog niet veel materiaal beschikbaar. Met deze blog wilde ik daar verandering in brengen. Hier presenteer ik niet alleen voltooide bundels, maar beschrijf ik ook hoe je ze in Sulu kunt integreren, inclusief de plekken waar je anders naar zou moeten zoeken.
De voorbeelden uit de workshop draaiden om gebeurtenissen. Zo ontstond de SuluEventBundle, waarin ik elke Sulu-functie verwerkte die ik kon vinden. Kort daarna volgde de SuluNewsBundle. In tegenstelling tot de toenmalige SuluArticleBundle had deze geen Elasticsearch nodig en beschikte hij over vertaalbare SEO en een vertaalbaar uittreksel. Daarover schrijf ik later apart een artikel.
Een gebeurtenis is meer dan alleen een gegevensrecord
Een formulier voor het aanmaken van een evenement is snel gemaakt. De vragen die daarop volgen, zijn lastiger: Waar verschijnt het evenement in het beheerderspaneel? Hoe wordt het gepubliceerd? Hoe is het te vinden op de website? En werkt het op dezelfde manier als de Sulu-redacteuren al gewend zijn?
De sitemap illustreert wat ik bedoel met integratie. Slechts enkele dagen na de eerste commit was de sitemap-provider in april 2021 klaar. Een evenement wordt alleen opgenomen als het is gepubliceerd, tot de taal van de site behoort en niet is verborgen in het tabblad SEO. Het volgt dus dezelfde redactionele keuzes als de rest van de website (Documentatie).
Met Smart Content kunnen evenementen als een dynamische lijst op elke Sulu-pagina worden weergegeven. Bezoekers kunnen categorieën en tags selecteren via URL-parameters. De filters die in het beheerderspaneel zijn ingesteld, blijven van kracht; de selectie die op de website wordt gemaakt, beperkt de resultaten slechts verder (Docs). Dit ziet er minder spectaculair uit dan een kalender, maar maakt de bundel flexibeler in het dagelijks gebruik.
Wat er in de loop der jaren is toegevoegd
- 2021: Locaties, SEO en samenvatting, sitemap (De eerste paar weken)
- 2023: Prullenbak, activiteitenlogboek, timing via de automatiseringsbundel, filters in Smart Content (Prullenbak, planning en activiteiten)
- Herfst 2025: Agenda, evenementtypes met kleuren, terugkerende evenementen (Agenda, Terugkerende evenementen en iCal)
- December 2025: Overgang naar Sulu 3 (De overgang naar Sulu 3)
- 2026: Teasers, referenties, MCP-tools en filters op categorie en tag op de website
Wat betreft terugkerende evenementen is er een technische beslissing genomen die ik uitleg in het bericht over de kalender uitleg. De bundel kan het aantal keren dat een gebeurtenis plaatsvindt berekenen op basis van een regel voor een opgegeven tijdsperiode. Als alternatief maakt de bundel ze aan als daadwerkelijke vermeldingen via een consolecommando, wat kan helpen bij het indexeren en de prestaties (documentatie). Er is ook een kalenderweergave, iCal-export en RSS- en Atom-feeds.
Slechts 3 en AI
De migratie naar Sulu 3 in november en december 2025 was weer een intensieve leerfase. Het volstond niet om simpelweg het versienummer in het composer.json bij te werken. Ik moest de integratiepunten opnieuw doornemen en controleren hoe de uitgebreide functies in hun huidige staat op elkaar inwerken. De 3.x-branch vereist Sulu 3. De Sulu 2-branch bestaat nog steeds, maar ik ontwikkel deze niet meer – daar heb ik simpelweg geen tijd voor. Je kunt lezen hoe de migratie is verlopen in het bericht over de migratie naar Sulu 3.
Sommige functies zijn tijdens de migratie komen te vervallen. MassiveSearch was de zoekmachine in Sulu 2; Sulu 3 maakt gebruik van Seal. Op 29 november heb ik daarom MassiveSearch uit de EventBundle verwijderd. Onder Sulu 2 had ik methoden die door verschillende van mijn bundels werden gebruikt, als traits ondergebracht in een gedeelde bundel – SuluSharedTools. Ook deze is door Sulu 3 overbodig geworden; ik heb hem op 11 december verwijderd.
In tegenstelling tot in het begin beschikte ik tijdens de conversie over AI als hulpmiddel. Hierdoor kwamen er meer functies binnen bereik dan ik voor mogelijk had gehouden. Een resultaat van dit najaar zijn de optionele MCP-tools: als de Sulu MCP-bundel is geïnstalleerd, kunnen geautoriseerde AI-assistenten evenementen en locaties lezen, of deze als concepten aanmaken of bewerken. Publiceren is bewust niet opgenomen (documentatie).
AI vervangt in dit proces het menselijk inzicht niet. Het helpt bij het ontwerpen, testen en implementeren. Ik beoordeel nog steeds zelf of een functie in de architectuur past, welke rechten deze vereist en of deze goed aanvoelt voor redacteuren. Er is een verschil tussen het genereren van code en het bouwen van een betrouwbare extensie, waarover ik hier graag zou willen schrijven.
Wat gebeurt er nu?
Ik wil de kennis die ik destijds heb verzameld graag doorgeven. Niet als dé ‘juiste’ manier, maar als een duidelijk voorbeeld: een specifieke vereiste, de technische uitvoering ervan en de beslissingen die eraan ten grondslag liggen. In volgende artikelen zullen we ingaan op afzonderlijke functies van de bundel.
Eerdere artikelen in de reeks, in chronologische volgorde:
- De eerste paar weken van de SuluEventBundle
- Prullenbak, Tijdstippen en activiteiten in de SuluEventBundle
- Agenda, Terugkerende gebeurtenissen en iCal in de SuluEventBundle
- De conversie van de SuluEventBundle naar Sulu 3
- AI-assistenten en evenementen: de MCP-tools in de SuluEventBundle
Repository: manuxi/SuluEventBundle op GitHub