Ik ben bezig met een redelijk eenvoudig CMS voor particulieren en MKB, in PHP en SQL.
Een eerste versie was gesneuveld omdat ik niet goed had nagedacht over globale variabelen, caching en integratie van modules. Voor deze tweede versie heb ik nog nauwelijks echt gecode, het gaat dus vooral om problemen op papier en in mijn hoofd.
De situatie:
Alle pagina's komen uit op index.php. In mijn database, in een referentie tabel, houd ik bij welke module moet worden gebruikt bij welke url.
De modules hebben elk hun eigen map, met daarin een setup bestand, settings, benodigde klassen, functies, templates, etc. Met PHP lees ik de map met modulemappen uit.
Het probleem is dat sommige modules paginaonafhankelijk zijn (bijv. webstats). Mij lijkt het inbouwen van hooks een oplossing. Een module kan aangeven of deze altijd moet worden uitgevoerd op verschillende momenten in de opbouw van een pagina.
Drie momenten die mij handig lijken zijn:
Een andere kwestie is het combineren van modules. Ik kan me voorstellen dat als ik het CMS steeds verder uitbreid, er de mogelijkheid moet zijn om bepaalde modules te combineren. Bijvoorbeeld door het toevoegen van een poll toe aan een tekstpagina, of de mogelijkheid voor bezoekers om reacties toe te voegen aan een tekstpagina. De paginamodule (voor simpele tekstpagina's zonder interactie) moet dan andere modules laden.
Ik zit erover te denken van de paginamodule een "containermodule" te maken; een module waar je andere modules aan kan toevoegen. Modules kunnen dan aangeven of ze toegevoegd kunnen worden aan de containermodule. In de tabel van de paginamodule moet dan nog worden aangegeven welke submodules moeten worden geladen met welke content-ID, zodat in de backend een poll met ID 12 kan worden toegevoegd aan de container.
Is deze opbouw handig en future-proof? Of kan ik het beste gelijk van alle modules een containermodule maken? Het lijkt me overkill, maar soms is overkill beter dan jezelf vooraf al te beperken. En een CMS kan je oneindig groot maken, dus wellicht is het slim om nu een aantal grenzen te stellen (waar ik later ongetwijfeld spijt van ga krijgen
)
Graag hoor ik hoe jullie erover denken.
Een eerste versie was gesneuveld omdat ik niet goed had nagedacht over globale variabelen, caching en integratie van modules. Voor deze tweede versie heb ik nog nauwelijks echt gecode, het gaat dus vooral om problemen op papier en in mijn hoofd.
De situatie:
Alle pagina's komen uit op index.php. In mijn database, in een referentie tabel, houd ik bij welke module moet worden gebruikt bij welke url.
De modules hebben elk hun eigen map, met daarin een setup bestand, settings, benodigde klassen, functies, templates, etc. Met PHP lees ik de map met modulemappen uit.
Het probleem is dat sommige modules paginaonafhankelijk zijn (bijv. webstats). Mij lijkt het inbouwen van hooks een oplossing. Een module kan aangeven of deze altijd moet worden uitgevoerd op verschillende momenten in de opbouw van een pagina.
Drie momenten die mij handig lijken zijn:
- Voordat aan de paginaopbouw wordt begonnen
- Na de paginaopbouw maar voor de output
- Na de output
Een andere kwestie is het combineren van modules. Ik kan me voorstellen dat als ik het CMS steeds verder uitbreid, er de mogelijkheid moet zijn om bepaalde modules te combineren. Bijvoorbeeld door het toevoegen van een poll toe aan een tekstpagina, of de mogelijkheid voor bezoekers om reacties toe te voegen aan een tekstpagina. De paginamodule (voor simpele tekstpagina's zonder interactie) moet dan andere modules laden.
Ik zit erover te denken van de paginamodule een "containermodule" te maken; een module waar je andere modules aan kan toevoegen. Modules kunnen dan aangeven of ze toegevoegd kunnen worden aan de containermodule. In de tabel van de paginamodule moet dan nog worden aangegeven welke submodules moeten worden geladen met welke content-ID, zodat in de backend een poll met ID 12 kan worden toegevoegd aan de container.
Is deze opbouw handig en future-proof? Of kan ik het beste gelijk van alle modules een containermodule maken? Het lijkt me overkill, maar soms is overkill beter dan jezelf vooraf al te beperken. En een CMS kan je oneindig groot maken, dus wellicht is het slim om nu een aantal grenzen te stellen (waar ik later ongetwijfeld spijt van ga krijgen
Graag hoor ik hoe jullie erover denken.