Ik ben momenteel bezig met het herschrijven van een backend van een site (geschreven in PHP4) waarbij ik het zo "dynamisch" mogelijk wil maken. Op zo'n manier dat menu dynamische worden opgebouwd dus niet vanuit templates e.d.
Nu ik zie een menu item als een bepaalde actie, alleen moet deze actie natuurlijk in een bepaald menu en volgorde komen. Nu vraag ik me af hoe ik dit het beste kan doen, momenteel heb ik een klasse "Command". Tijdens openen van de php file loop ik een directory door waar ik Command_*.inc.php bestanden include() en instantieer. Vervolgens roep ik bepaalde functies aan om bepaalde waardes terug te krijgen om die zodoende te kunnen gebruiken.
Als er vervolgens door de gebruiker op een menu item wordt gedrukt, dan laat ik de CommandController de actie uitvoeren, oftewel ik maak een instantie aan van de actie (door de eerdere include() is de klasse al beschikbaar) en roep ik de functies $c->beforeExecute(), $c->execute() en $c->afterExecute() aan, hierop gevolgd wordt dus een serie acties uitgevoerd.
Tot heden werkt dit prima, alleen op deze manier kan ik alleen nu niet echt de volgorde van de menu items bepalen. Zowel de "main menu items" als de gewoon menu items. De functie getCommandGroup() gebruik ik om te vertellen tot welke groep deze commando hoort, bijv. templates, pages, config etc. Een mogelijk functie hiervoor is:
Het probleem waarmee ik nu zit wat is de beste manier om de volgorde van deze menu items te bepalen, zou ik een getMenuIndex()-functie gebruiken? Nu werkt het momenteel op alfabetische volgorde -- eerder in welke volgorde de bestanden zijn ge-include() en geinstantieert. Iemand enig idee hoe ik dit het beste kan oplossen? Zijn er misschien betere manier voor getMenuIndex() of heel mijn Commands<>CommandController idee?
Command-klasse definitie, namelijk:
Nu ik zie een menu item als een bepaalde actie, alleen moet deze actie natuurlijk in een bepaald menu en volgorde komen. Nu vraag ik me af hoe ik dit het beste kan doen, momenteel heb ik een klasse "Command". Tijdens openen van de php file loop ik een directory door waar ik Command_*.inc.php bestanden include() en instantieer. Vervolgens roep ik bepaalde functies aan om bepaalde waardes terug te krijgen om die zodoende te kunnen gebruiken.
Als er vervolgens door de gebruiker op een menu item wordt gedrukt, dan laat ik de CommandController de actie uitvoeren, oftewel ik maak een instantie aan van de actie (door de eerdere include() is de klasse al beschikbaar) en roep ik de functies $c->beforeExecute(), $c->execute() en $c->afterExecute() aan, hierop gevolgd wordt dus een serie acties uitgevoerd.
Tot heden werkt dit prima, alleen op deze manier kan ik alleen nu niet echt de volgorde van de menu items bepalen. Zowel de "main menu items" als de gewoon menu items. De functie getCommandGroup() gebruik ik om te vertellen tot welke groep deze commando hoort, bijv. templates, pages, config etc. Een mogelijk functie hiervoor is:
PHP:
1
2
3
4
5
6
7
8
| // The command group that this command belongs to. function getCommandGroup() { // GroupName => main menu item // DefaultCommand => default command for this group return array( 'GroupName' => "Blueprints", 'DefaultCommand' => 'blueprint_pages' ); } |
Het probleem waarmee ik nu zit wat is de beste manier om de volgorde van deze menu items te bepalen, zou ik een getMenuIndex()-functie gebruiken? Nu werkt het momenteel op alfabetische volgorde -- eerder in welke volgorde de bestanden zijn ge-include() en geinstantieert. Iemand enig idee hoe ik dit het beste kan oplossen? Zijn er misschien betere manier voor getMenuIndex() of heel mijn Commands<>CommandController idee?
Command-klasse definitie, namelijk:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| class Command extends Object { function __construct( $args = NULL ) { } function __destruct() { } function rollback() { return false; } function execute() { return false; } function isMenuItem() { return (bool) TRUE; } function beforeExecute() { } function afterExecute() { } // The command group that this command belongs to. function getCommandGroup() { } function getCommandTitle() { return NULL; } } |
[ Voor 4% gewijzigd door alienfruit op 21-06-2005 18:55 ]