[OOP] MVC CMS 'Menu'-probleem
Ik ben momenteel bezig met het ontwikkelen van een CMS in MVC, maar ik kom een probleem tegen bij het ontwerpen van het Menu. (Het gaat hier dus puur om de theoretische fase)
Uitleg: Het gaat om het ontwerpen van een stukje script om een menu te kunnen bewerken die in de front weergegeven wordt. Oftewel, Zoals hier bovenaan de site menu-items staan, wil ik een stukje script om dit menu aan te passen, menu-items toe te voegen, namen te veranderen etc.
Waar mijn probleem zich voordoet is dat er verschillende modules zijn die verschillende inhoud hebben.
Er zijn verschillende modules en binnenin zitten weer verschillende items. Voorbeeld: Module 'Pagina' bevat verschillende pagina's zoals 'Informatie'.
Echter zijn er ook voorbeelden dat ik naar een module wil verwijzen die een standaard pagina heeft.
Voorbeeld: Module 'Foto Album' bevat standaard 'Foto Albums overview'
Echter zijn er ook voorbeelden dat ik een module heb die geen menu-items heeft. Voorbeelden: Module 'Pagina' hoeft géén pagina's noodzakelijkerwijs te bevatten en dus ook niet in het menu voor te komen. Ook Module 'Gebruikers' is om de accounts die kunnen inloggen in het cms te beheren, niet iets voor de FrontEnd.
Probleem: Het probleem is denk ik vooral het database-ontwerp. Ik wil dus binnen de database van tabel menu verwijzen naar de tabel modules en daarbij ook verwijzen naar een 'variabele' tabel van de module (Voorbeeld: Pages->page_id). Dit 'variabele' is exact het probleem. Doordat ik steeds nieuwe modules wil kunnen toevoegen, moet dit zo abstract mogelijk blijven en wil ik in een menu-item verwijzen naar een 'iets' binnen een module óf niet. Dit vanwege de mogelijkheid dat een module geen 'iets' heeft. Zoals het FotoAlbum.
Misschien ben ik gewoon veel te moeilijk aan het denken en ligt de oplossing gewoon dicht bij de hand.. Of misschien kan het niet wat ik wil.
Ik wil wel wijzen op het niet accepteren van de werkwijze: hardcode. Dus ik wil geen URL-verwijzing maken. Ik wil het zo abstract mogelijk houden, zodat ik veel uitbreidingsmogelijkheden heb.
Om dit te verduidelijken heb ik een plaatje gemaakt: http://www.jamsch.nl/phphulp.jpg
Hoop dat ik dit een beetje heb kunnen uitleggen, zo niet, vraag me wat ik nog moet verduidelijken, ik heb m'n best gedaan.
Overigens wil ik zelf alvast concluderen dat ik niet zo'n Photoshopper ben (A)
Alvast Bedankt! Jan Aart
Je plaatje doet het niet...
Ik zou bij het genereren van het menu van iedere module een bepaalde method aanroepen met als argument de instantie van je Menu-class. De module heeft binnen die method dan de kans om op te zoeken welke items hij wil toevoegen, en doet dat door bepaalde methods op de instantie van Menu aan te roepen. Op die manier hebben de modules alle vrijheid in het toevoegen van menu-items.
Mocht het langzaam worden, omdat het teveel tijd kost om alle modules (deels) te laden iedere keer wanneer je het menu wilt genereren, dan kan je het resultaat vrij gemakkelijk cachen.