OZP är liksom sin föregångare SSX nästan uteslutande byggd i PHP. En av de främsta skillnaderna är att OZP är betydligt mer objektorienterat än SSX. OZP är dock i första hand "halvt" objektorienterat, i den mån att det innehåller många delade funktioner, en använder relativt få klasser med konstruktorer och destruktorer.
En ganska vanlig missuppfattning kring PHP är just att det inte går att objektorientera. Men det går faktiskt riktigt bra. Man kan arbeta ungefär som när man utvecklar i språk som exempelvis Java eller C++. Däremot brukar det enligt min erfarenhet var ganska ovanligt att man objektorienterar fullt ut i PHP. Jag anser dock att det är viktigt att man gör det lagom mycket, så att man slipper problem med redundans och multipla funktioner som gör samma sak och därmed måste förändras individuellt - det är mycket lättare att skapa en funktion och/eller en klass centralt, som sedan anropas av andra funktioner.
OZP innehåller flera delade bibliotek som används både i själva publiceringsgränssnittet och på de webbplatser som jag kör med OZP i botten. I SSX - som jag byggde samtidigt som jag lärde mig att utveckla i PHP blev stort och otympligt just därför att det inte var objektorienterat.
Vid sidan av de externa funktionerna som styr publicering och visning av innehåll finns det även en del funktioner som körs i bakgrunden på servern, av en funktion som jag kallar för Gnome. Det spelar ingen roll om man kör OZP på Windows- eller Unix-plattformen, utan de fungerar ungefär likadant, antingen att de körs som scheduled tasks eller via crontab. Under sommaren tänkte jag försöka bygga en regelrätt service för Windows-plattformen som startas upp med servern, så att man därmed kan styra den direkt via gränssnittet i OZP.
Den här bakgrunsfunktionen (Gnome) tar hand om olika uppgifter som behöver utföras med olika intervall för att inte slöa ner laddningen av innehållet externt. Bland annat städar den upp i besöksloggen för att dölja sidvisningar som genererats av olika sökmotorer och indexeringstjänster, liksom att den regelbundet pingar olika RPC-hostar när webbplatsen är uppdaterad. Gnome arkiverar även äldre besöksstatistik och skickar ut mailpåminnelser till olika användare som antingen har olästa meddelanden i systemet, eller som har kommenterat artiklar eller blogginlägg utan att verifierat dem. En väldigt viktig funktion är även Gnomes cachning av externa RSS-feedar som annars kan ta tid att laddas om de ska hämtas från källan on the fly.
Jag jobbar nu med att förbättra stödet för AJAX i systemet, för att göra sidorna mer dynamiska. AJAX används just nu bara i publiceringsgränssnittet, men ska även implementeras på webbplatserna. Även om innehållet i sig inte förändras så ofta innebär det mindre belastning för servern om besökarna slipper ladda om hela sidor varje gång de svarar på en snabbfråga eller liknande.
Att göra OZP till en mer "säljbar" lösning blir ett av sommarens projekt, om jag nu inte skulle få ett heltidsjobb ganska snart. Målet är i alla fall att få ut OZP hos en del av mina kunder, eftersom det innebär att jag även får en del testpiloter som kan komma med input om hur det bör förbättras.