[PHP] Menu volgorde bepaling, wat is de beste manier?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 20:38

alienfruit

the alien you never expected

Topicstarter
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:

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 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Je zou een aparte MenuItem class kunnen maken. Dat is dan een object wat een Command bevat/gebruikt, en niet zelf een Command is. Die zou je dan een index kunnen geven en dan met <vul je sorteer algoritme hier in> kunnen sorteren. Of vat ik het probleem een beetje te licht op?

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 20:38

alienfruit

the alien you never expected

Topicstarter
Mijn oorspronkelijke plan/idee was om menu items en commando's te combineren, maar nu je het zegt is jou oplossing natuurlijk veel beter. Functionaliteit gescheiden, ik zou dan aan een menu item een commando kunnen koppelen. Inderdaad een betere oplossing, waar ik nog niet aan had gedacht... dank je wel. Ik ga eens aan de slag hiermee, nogmaals bedankt!

[ Voor 12% gewijzigd door alienfruit op 21-06-2005 21:17 ]