Personalisatie met het Magnolia CMS

Enige tijd geleden hebben we voor Van Lanschot Bankiers een nieuwe website gebouwd met het (grotendeels) open-source Java Magnolia CMS. Op de website van Magnolia is een korte case study te lezen over dit project. In deze blogpost gaan we dieper in op de technische realisatie van het personalisatie onderdeel in Magnolia en vertellen wij waarom wij denken dat Magnolia een geschikt product is voor deze case. Het stuk zal met name een meer technisch publiek met kennis van Java aanspreken maar vertelt ook waar de techneuten binnen Info.nl zich in de dagelijkse praktijk zoal mee bezig houden.

Zoals ook valt te lezen in de case study bestaat de kern van deze nieuwe website, gebaseerd op Info.nl’s model van Virtuele Warmte, uit het aangaan van een online dialoog met de bezoeker. Deze dialoog bestaat er uit dat de (potentiële) klant enkele gegevens over zichzelf opgeeft (zoals zijn te besteden vermogen) waarna de website onderwerpen toont die aansluiten bij deze gegevens. Voor elke bezoeker op de website wordt bijgehouden welke onderwerpen hij heeft bekeken. Samen met de door hem ingevoerde gegevens vormt deze informatie een persoonlijk dossier:

dossier

Magnolia CMS

magnoliaenterpriseMagnolia is één van de web content management systemen waarmee Info.nl de online ambities van haar klanten realiseert. Info.nl is ook officieel een implementatie partner van Magnolia. Voor Van Lanschot Bankiers is gekozen voor de Magnolia Enterprise Edition; een bewezen en stabiel product met ondersteuning vanuit Magnolia. Kenmerken van dit op Java gebaseerde CMS zijn onder andere:

  • volledig op de Java Content Repository (JCR) standaard gebaseerd; het maakt gebruik van de Apache Jackrabbit JCR implementatie
  • open-source; dit geldt overigens niet voor de modules die deel uitmaken van de enterprise versie
  • modulair; en daarmee eenvoudig uitbreidbaar met custom functionaliteit
  • intuïtief en laagdrempelig; zowel voor ontwikkelaars als redacteuren

Bijhouden van bekeken onderwerpen

De bezoeker van de website is altijd anoniem; omdat het niet om persoonsgebonden data gaat is er geen inlogprocedure. Vanuit een dossier valt niet te achterhalen wie de bijbehorende bezoeker is geweest. In Magnolia wordt voor de bezoeker een HTTP sessie opgebouwd met daarin haar dossiergegevens. Elke keer als de bezoeker een onderwerp bekijkt dan wordt dit onderwerp toegevoegd aan haar dossier in de volgorde van laatst bekeken onderwerp. Wordt eenzelfde onderwerp voor een tweede keer bekeken, dan wordt het onderwerp verwijderd uit de bekeken onderwerpen en weer vooraan toegevoegd. Om dit te kunnen doen is er een Filter geschreven in Magnolia die afgaat bij elke onderwerp pagina. Onderstaand screenshot uit de redactieomgeving van Magnolia toont de Magnolia “filter chain” inclusief onze eigen filters.

filters

Ieder request dat op de webserver binnenkomt doorloopt de hele chain van filters, waarbij het ook langs het filter voor de dossiers komt. Dit filter kijkt of er bepaalde variabelen op de URL aanwezig zijn. Een voorbeeld hiervan is de unieke identifier van een onderwerp dat wordt getoond. Komt de parameter voor in de URL, dan zal de identifier worden toegevoegd aan de lijst van bekeken onderwerpen. In de JSP pagina kan deze lijst worden gelezen en kunnen de details van de onderwerpen uit Magnolia worden gelezen. Hierbij moet worden gedacht aan de titel van het onderwerp, maar ook het pad naar het onderwerp om zo een link met titel en link te kunnen maken.

Opslaan en laden

Het opgebouwde dossier kan ook worden opgeslagen door de bezoeker. Hierbij moet er een e-mail adres worden opgegeven. Deze wordt verder niet opgeslagen. In de e-mail die de bezoeker vervolgens krijgt is een link opgenomen waarmee de mogelijkheid ontstaat om verder te gaan waar zij was gebleven.

Het opslaan van een dossier is gerealiseerd door middel van het definiëren van een virtualURIMapping en een bijbehorende Magnolia page, wat te vergelijken is met een Controller uit het MVC model. Pages zijn geïmplementeerd als Java classes en worden gedefinieerd in de Magnolia redactieomgeving zoals onderstaand screenshot toont.

pageuri

Bij het opslaan van het dossier zal de page worden aangeroepen (via de virtuele URI mapping). Achtereenvolgens wordt de informatie gepersisteerd en de e-mail verzonden. Bij het opslaan van de bekeken onderwerpen worden de unieke identifiers als een komma gescheiden string opgeslagen.

Het laden van het dossier door middel van de link uit de e-mail vindt plaats met dezelfde page. De gegevens worden aan de hand van de meegestuurde identifier geladen en in de sessie van de gebruiker geplaatst. Vervolgens wordt de gebruiker naar een algemene beheerpagina binnen de website gestuurd. Op deze pagina wordt een overzicht getoond van alle bekeken onderwerpen zodat er snel naar één van de, in het verleden bekeken, onderwerpen gesprongen kan worden.

Het lijkt alsof dit mechanisme gevoelige informatie van bezoekers bloot legt, maar dit is niet het geval. Zoals eerder beschreven worden er nooit zaken als naam, adres en dergelijke van een bezoeker vastgelegd. Een dossier zal deze informatie dus ook nooit bevatten.

Uitdagingen en oplossingen

Voordat er naar de uitdaging wordt gekeken is het van belang te weten met welke omgeving we te maken hebben. Zo is er in onze situatie een Magnolia redactieomgeving en zijn er twee publieke Magnolia instanties waar de gepubliceerde site op draait. Er is gekozen voor deze opzet omdat we daarmee een hoge load kunnen verwerken en een minimale downtime hebben (we kunnen de twee instanties 1 voor 1 upgraden bijvoorbeeld).

Een van de ontwerpbeslissingen die genomen moest worden, was of er bij het opslaan van de dossiers deze in de JCR repository (Jackrabbit) moesten worden opgeslagen, of in een aparte database. Uiteindelijk is er gekozen om deze in een eigen database op te slaan. De reden hiervoor was, dat het erg moeilijk is om gegevens die op een van de publieke servers wordt opgeslagen naar de andere omgevingen te krijgen (dus zowel de andere publieke, alsook de redactieomgeving). Om dit te vereenvoudigen is er een aparte gedeelde database gebruikt. Overigens ondersteunt de meest recente versie van Jackrabbit nu ook clustering over meerdere servers waardoor een op JCR-gebaseerde oplossing daarmee ook mogelijk wordt.

Een andere vraag betrof de informatie die wordt opgeslagen ten behoeve van de bekeken onderwerpen. Uiteindelijk is alleen de unieke identifier van het onderwerp opgeslagen. Nadeel hiervan is, dat op iedere pagina waar een overzicht wordt getoond van bekeken onderwerpen, deze informatie uit de JCR wordt gelezen. Voordeel is, dat de informatie altijd up-to-date is. Wordt er in de redactieomgeving de titel van de pagina aangepast, of wordt de pagina verplaatst, dan zal het onderwerp nooit ‘kapot’ zijn. De links blijven altijd werken. Wanneer een pagina wordt verwijderd, dan zal de informatie niet gevonden kunnen worden in de JCR en zal er geen link naar het desbetreffende onderwerp worden getoond.

Conclusie

Magnolia is een geschikt CMS gebleken om het nieuwe online concept voor Van Lanschot Bankiers mee te realiseren. Het is een relatief lichtgewicht maar erg open product gebaseerd op gangbare (Java) standaarden. Het product uitbreiden met custom functionaliteit zoals hier beschreven is erg goed te doen. Dankzij de intuïtieve redactieomgeving met een “inline editing” interface kan de webredactie deze dynamische website ook goed onderhouden.

2 Reacties op “Personalisatie met het Magnolia CMS”

  1. Anders Floor zegt:

    Interessante ontwikkeling. Alleen heb ik er wel een probleem mee en je kunt al aan je water voelen aankomen dat dan wel over privacy zal gaan. inderdaad :)

    Mijn punt is, als klant vind ik het wellicht helemaal niet prettig dat een bedrijf bijhoudt wat ik precies bekijk en hoe hoog mijn vermogen is. Als ik een bank binnenloop wil ik bijvoorbeeld niet dat een bankmedewerker opschrijft welke folders ik aan het bekijken ben in het rek.

    Jullie schrijven “Zoals eerder beschreven worden er nooit zaken als naam, adres en dergelijke van een bezoeker vastgelegd.” Maar hoe weet ik dat? He wordt niet in een oogopslag duidelijk. Ook bij nadere beschouwing (“wat kan ik met mijn dossier”) blijkt niet dat het niet wordt opgeslagen en als i kdan uit paranoia het privacy statement induik staat daar nota bene dat er op de site persoonsgegevens worden verzameld voor promotiedoeleinden.

    Lopen jullie/loopt Van Lanschot niet het risico dat mensen dit niet waarderen? Waarom is er bijvoorbeeld geen mogelijkheid om het uit te schakelen? Waarom moet ik bij het opslaan ook mijn naam opgeven? Waarom kan ik zijn dossier niet wissen? Stel dat ik onder werktijd even op de site ben en mijn collega loopt langs, dan wil ik echt niet dat die mijn vermogen met grote letters op het scherm ziet staan.

    Let wel, ik ben overtuigd voorstander van personalisatie en ontwikkelingen in deze richting vind ik dan ook zeer interessant. Ik denk alleen dat het op een conservatief-zakelijke site als Van Lanschot met iets meer integriteit uitgevoerd had kunnen worden.

    Iets anders, als Van Lanschot dan toch deze kant op gaat, dan zou het wellicht wel aardig zijn als er dan ook op maat gemaakte content op het scherm verschijn. Bekijkt iemand bijvoorbeeld de onderwerpen Bedrijfsovername en Bedrijfsrisico’s, dan weet je dat je zeer waarschijnlijk met een ondernemer te maken hebt en daar zou je je communicatie op aan kunnen passen. Komt dat er wellicht in de toekomst in, is het niet gedaan om integriteitsredenen of is het niet mogelijk in Magnolia?

  2. Edgar zegt:

    Hoi Anders,

    Bedankt voor je reactie! Goede en terechte punten die je aansnijdt. Ik reageer nu alleen even op de meer technische vragen die je stelt (dat is mijn vakgebied tenslotte). Over de op maat gemaakte content. Die is in bepaalde zin wel aanwezig in de vorm van het tonen van bij een bepaald onderwerp gerelateerde onderwerpen. Ik ben het met je eens dat je daar nog veel meer mee zou kunnen doen. Er is (binnen Magnolia) zeker geen technische beperking om dit verder uit te bouwen. Het zou mooi zijn als we in de toekomst de personalisatie binnen de site op deze manier verder uit kunnen bouwen!

    Nog even voor de zekerheid: alleen als de bezoeker op de site kiest voor “Mijn dossier bewaren” wordt er daadwerkelijk iets opgeslagen in het systeem. En wat er dan opgeslagen wordt is enkel het dossier welke bestaat uit een lijst met bekeken onderwerpen en de opgegeven vermogensgegevens. Nergens in dit opgeslagen dossier worden persoonsgegevens opgeslagen. De naam en het e-mail adres van de bezoeker worden uitsluitend gebruikt voor de te versturen e-mail en worden niet opgeslagen.

    PS: Het kunnen wissen van een dossier voegt volgens mij niet zo veel toe. Als je niet wilt dat een collega meekijkt dan sluit je toch gewoon het browservenster/tabblad af? Als je je PC niet goed beschermt dan kan een collega bovendien waarschijnlijk veel meer informatie over je vinden dan alleen dit..

Laat een reactie achter

Je moet ingelogd zijn om een reactie te plaatsen.