Ik ben bezig met het opzetten van een web-applicatie. Ik loop daarbij tegen 2 probelemen aan. Ik zou jullie hierover graag om advies vragen.
1. Page construction
Mijn applicatie is volledig OOP, een korte omschrijving:
De Application class wordt aangeroepen. Deze initializeerd algemene classes: Database, Language (meertaligheid), User, Error & TempData. Deze classes worden toegekend aan variabelen van Application, welke toegankelijk is d.m.v. een Singleton. Application gaat vervolgens kijken welke pagina ingeladen moet worden.
Aan de andere kant van de applicatie heb ik objecten als HTMLTable, FormValidator, etc. Nu zit ik met het probleem dat ik niet goed weet hoe ik dit alles bij elkaar moet brengen.
Ik heb onderdelen die op meerdere pagina's verschijnen en pagina's bestaan vrijwel altijd uit meerdere onderdelen. Mijn idee was om dit te doen door middel van 2 soorten classes:
Ik loop tegen enkele problemen aan als ik dit wil uitvoeren:
2. Template gebruik
Ik heb wat template-enginges gebruikt, maar ik ben hier niet zo over te spreken. Bij deze applicatie ga ik veel HTML-objecten gebruiken en deze opmaken d.m.v. CSS. Echter zullen sommige onderdelen toch in Templates ingedeeld moeten worden. Hiervoor wil ik PHP gebruiken.
Door de OO manier, kan ik in een output()-method geen eenvoudige include gebruiken... return include('template.tpl'); zal niet werken. Ik wil wel controle hebben over mijn templates en de output ervan. Zo zal een 'geparsedte' template toegekend moeten kunnen worden aan een variabele in een andere template.
Verder zit ik met het probleem hoe ik de layout van de hele pagina moet integreren in mijn design. Ik kan natuurlijk een header & footer includen voor en na iedere pagina. Het is alleen zo dat deze zelf ook bestaan uit PageElements en er enige interactie mogelijk moet zijn tussen de Header en een Page (of PageElement).
Beide punten zitten me nu al enige tijd dwars en ik kom er maar niet op een goede manier uit. Uiteraard heb ik het e.e.a. gezocht en gelezen. Ik heb het GoF boek naast me liggen (nog niet helemaal gelezen).
Voor allebei kan ik wel een of andere omweg verzinnen, maar ik ben bang dat ik dan op een gegeven moment vast loop of echt enorme omwegen moet gaan maken en dat is natuurlijk niet de bedoeling.
Alvast hartelijk bedankt!
1. Page construction
Mijn applicatie is volledig OOP, een korte omschrijving:
De Application class wordt aangeroepen. Deze initializeerd algemene classes: Database, Language (meertaligheid), User, Error & TempData. Deze classes worden toegekend aan variabelen van Application, welke toegankelijk is d.m.v. een Singleton. Application gaat vervolgens kijken welke pagina ingeladen moet worden.
Aan de andere kant van de applicatie heb ik objecten als HTMLTable, FormValidator, etc. Nu zit ik met het probleem dat ik niet goed weet hoe ik dit alles bij elkaar moet brengen.
Ik heb onderdelen die op meerdere pagina's verschijnen en pagina's bestaan vrijwel altijd uit meerdere onderdelen. Mijn idee was om dit te doen door middel van 2 soorten classes:
PHP:
1
2
3
4
5
6
7
8
9
| class Page { //Interface for pages var $app; function Page(&$content) { $this->app = Application::getInstance(); } function construct() {} // initiate/use page-elements function show() {} // assign variables and include template(s) } |
PHP:
Een voorbeeld van een Page is UserRegistration. Dit is fysiek meer dan 1 pagina, maar voor de applicatie is dit 1 pagina. Deze pagina bestaat dan uit verschillende PageElements: RegistrationForm, RegistrationHelp, Banner, etc. en gebruikt verder bijvoorbeeld de FormValidator. Andere voorbeelden van PageElements zijn: LoginForm, TextItem, FAQ, Menu.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| class PageElement { //Interface for page-elements var $app; var $content; function PageElement(&$content) { $this->app = Application::getInstance(); $this->content =& $content; } function prepare() {} //[optional] get objects | determine what to do function action() {} //perform action function finish() {} //[optional] function output() { //return html to Page return $this->content; } } |
Ik loop tegen enkele problemen aan als ik dit wil uitvoeren:
- Hoe bouw ik het best een pagina op met deze PageElements?
Ik kan een grote array doorlopen waarin ze allemaal gedefinieerd staan en van elk object de interface doorlopen. Ik heb dan echter weinig controle over de objecten. Ik kan dan wel in de show-methode van ieder pageElement de output()-methode aanroepen. - Hoe moet ik dit doen als PageElement weer een PageElement bevat?
- Is het wel verstandig om alle elementen aan een vaste interface te binden?
2. Template gebruik
Ik heb wat template-enginges gebruikt, maar ik ben hier niet zo over te spreken. Bij deze applicatie ga ik veel HTML-objecten gebruiken en deze opmaken d.m.v. CSS. Echter zullen sommige onderdelen toch in Templates ingedeeld moeten worden. Hiervoor wil ik PHP gebruiken.
Door de OO manier, kan ik in een output()-method geen eenvoudige include gebruiken... return include('template.tpl'); zal niet werken. Ik wil wel controle hebben over mijn templates en de output ervan. Zo zal een 'geparsedte' template toegekend moeten kunnen worden aan een variabele in een andere template.
Verder zit ik met het probleem hoe ik de layout van de hele pagina moet integreren in mijn design. Ik kan natuurlijk een header & footer includen voor en na iedere pagina. Het is alleen zo dat deze zelf ook bestaan uit PageElements en er enige interactie mogelijk moet zijn tussen de Header en een Page (of PageElement).
Beide punten zitten me nu al enige tijd dwars en ik kom er maar niet op een goede manier uit. Uiteraard heb ik het e.e.a. gezocht en gelezen. Ik heb het GoF boek naast me liggen (nog niet helemaal gelezen).
Voor allebei kan ik wel een of andere omweg verzinnen, maar ik ben bang dat ik dan op een gegeven moment vast loop of echt enorme omwegen moet gaan maken en dat is natuurlijk niet de bedoeling.
Alvast hartelijk bedankt!