[CMS] Dynamische content genereren

Pagina: 1
Acties:
  • 111 views sinds 30-01-2008
  • Reageer

  • MMUilwijk
  • Registratie: Oktober 2001
  • Laatst online: 09:23
Met enige huivering plaats ik dit topic, voornamelijk omdat wellicht moeilijk uit te leggen is. Toch doe ik een poging :) :

Ik wil voor een te ontwikkelen website (i.c.m PHP & MySQL) een CMS opzetten. Qua functionaliteit hoeft het CMS niet bijzonder uitgebreid te zijn.

De website gaat bestaan uit containers. Een container is eigenlijk niks anders dan een stukje content. Denk aan een header, een footer of een menu.
De headercontainer is opgebouwd volgens een template. Deze zegt dat het logo links moet en de de naam rechts. Door het opslaan van de locatie van het logo en de tekst voor de naam in de database kan de user deze ten alle tijden aanpassen. Hier ligt niet het probleem.
De containers zijn recursief, m.a.w. een container kan bestaan uit subcontainers etc. etc.

Het menu wordt echter dynamisch opgebouwd met behulp van php. De php-code bevindt zich in een .php bestand. Door middel van modules maak ik onderscheid tussen de diverse functionaliteiten. Ik heb een module voor de menu-functies, een andere voor de nieuws-functies etc. etc. De .php file bestaat op zijn beurt bestaat weer uit functies om structuur binnen de code te houden.

Wanneer iemand de website bezoekt dient een bepaalde container "geladen" te worden (bijvoorbeeld een overzicht van de laatste 10 nieuwsberichten). Nu het probleem, waar houd ik bij welke functie de aangevraagde container moet laden? Doe ik dit in de database? Zelf vind ik dat nogal een vieze constructie, maar ik kan geen betere oplossing bedenken.

Ik heb nogal wat topics afgestruind, maar daar maakten ze gebruik van een andere opzet voor het CMS. Op zich sta ik daar wel open voor, maar alleen als dat daadwerkelijk voordeel biedt. Structuren met objecten en elementen zijn natuurlijk heel mooi, maar vereisen nog ene hoop nadere studie.

Mocht iets niet duidelijk zijn hoor ik het graag!

Everytime I suffer I become a better man because of it


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 10:40
In de database een soort van boom maken waarin je alle onderdelen kunt plaatsen.

  • Minos111
  • Registratie: Augustus 2002
  • Laatst online: 05-03-2012
offtopic:
Jee zeg, leef jij ook nog? Tijd niet gezien ;)
(ik ben Jelle, van Badminton vroeger)


Een klassen-indeling is inderdaad wel handig hier. Als je het nou hebt over het structureren van code, dan is dat echt wel erg fijn. Niet dat het heel veel functioneel voordeel hoeft te bieden hoor, maar je houdt alle functionalteit van een module binnen 1 class. Wanneer je de functies van die module in de class houdt, dan zijn deze functies meteen niet meer bereikbaar voor andere klassen.

Bijvoorbeeld:

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/* Task class */
class Task {

    /* Constructor. You can optionally pass an id or a mysql row. */
    function Task() {

        global $session;

        $args = func_get_args();

        $object = ""; 

        /* If we've got an object, set $object to $args[0]. */
        if(is_object($args[0])) {
            
            $object = $args[0];
        
        } 
        
        /* If we got an id, fetch the object from the database. */
        else if($args[0]) {

            $db = new Db();

            $id = addslashes($args[0]);
            
            // haal het taak-object op uit de database
            (...)
        }

        /* Get the data from the object. */
        if($object) {
            
            $this->id                   = intval($object->task_id);
            $this->group_id             = intval($object->group_id);
            $this->user_id              = intval($object->user_id);
            $this->user_realname        = stripslashes($object->user_firstname . " " . 
                        $object->user_lastname);
            
            //meer data
            (...)

            
            if(!$this->check_access()) {
                $this = 0;
                return(0);
            }
            
        } else {
            $this->_new = 1;
        }
    }

    
    /* Check if the user has access to this task. */
    function check_access() {

        $db = new Db();

        global $session;
        
        // check of de user rechten heeft tot het object
        (...)
    }
}

De functie check_access() staat in de class en is dus specifiek daarvoor bedoeld. Er is dus geen verwarring met andere classes (modules) mogelijk...

Ik neem aan dat je de "aangevraagde container" via een $_GET variabele doorgeeft (gewoon een variabele in de URL dus)?

[ Voor 9% gewijzigd door Minos111 op 05-05-2004 17:25 ]


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 10:40
Jee zeg, leef jij ook nog? Tijd niet gezien
(ik ben Jelle, van Badminton vroeger)
offtopic:
Bah, ik badminton niet! :? tennis is stoerder :Y)

8)7 8)7 8)7 8)7 8)7 8)7 8)7
* djluc moet leren lezen, ik vond het al zo vaag...

[ Voor 21% gewijzigd door djluc op 06-05-2004 10:52 ]


  • MMUilwijk
  • Registratie: Oktober 2001
  • Laatst online: 09:23
djluc schreef op 05 mei 2004 @ 20:00:
[...]
offtopic:
Bah, ik badminton niet! :? tennis is stoerder :Y)
offtopic:
Volgens mij bedoelde hij mij :) Alles goed Jelle?


Een klasse is op zich inderdaad een manier, alleen zit ik dan volgens mij nog steeds met hetzelfde probleem. Hoe zorg ik ervoor dat de aangeroepen container(idd via GET vars) een object aanmaakt en daar een methode van aanroept. Leg ik dit vast in de database?

Everytime I suffer I become a better man because of it


  • Minos111
  • Registratie: Augustus 2002
  • Laatst online: 05-03-2012
Ik snap eigenlijk niet helemaal waarom je het op zo'n manier vast wil leggen. Kun je niet gewoon een swich in je index.php gooien die het hele zaakje afhandelt?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
switch($actie) {
    
    case "container1":
        $container = new Container1();
        $container->doeIets();
        break;

    case "container2":
        $container = new Container2();
        $container->doeIets();
        break;

    // et cetera
    (...)

    default:
        error("Please parse the container");
    
}


Of begrijp ik je nu verkeerd? :?

offtopic:
Ja het gaat goed! :)

  • sjoerdb2
  • Registratie: Juli 2001
  • Laatst online: 09-05-2025
Een boomstructuur zoals eerder genoemd kun je prima maken in mysql:

code:
1
2
3
4
5
6
7
8
9
id     is_sub_van    inhoud 
1               0    pagina 1
2               0    pagina 2
3               1    pagina 1.1
4               3    pagina 1.1.1
5               3    pagina 1.1.2
6               5    pagina 1.1.2.1
7               2    pagina 2.1
8               0    pagina 3


dmv recursieve functies kun je zo een menu bouwen

ik weet eigenlijk niet of dit precies is wat je zoekt?

[ Voor 8% gewijzigd door sjoerdb2 op 06-05-2004 07:44 ]


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
Minos111 schreef op 06 mei 2004 @ 07:26:
Ik snap eigenlijk niet helemaal waarom je het op zo'n manier vast wil leggen. Kun je niet gewoon een swich in je index.php gooien die het hele zaakje afhandelt?
PHP:
1


Of begrijp ik je nu verkeerd? :?

offtopic:
Ja het gaat goed! :)
Dat gaat goed, tot je vanuit bijvoorbeeld een webinterface wil gaan bepalen wat er in het menu komt ;)

@sjoerdb: Ik zou hier niet voor recussie gaan, dan krijg je na een tijdje veel te veel queries, gewoon bijhouden op welke diepte je zit en dan alleen de pagina's ophalen van die diepte lijkt mij voldoende.

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 28-02 19:26
Exact hetzelfde topic is afgelopen maand al zo'n 5 keer langs gekomen, heb je wel gezocht, TS?

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


  • MMUilwijk
  • Registratie: Oktober 2001
  • Laatst online: 09:23
Alex de Groot schreef op 06 mei 2004 @ 10:47:
Exact hetzelfde topic is afgelopen maand al zo'n 5 keer langs gekomen, heb je wel gezocht, TS?
Jazeker heb ik gezocht, maar ik heb geen relevant topic over deze specifieke vraagstelling heb ik niks kunnen vinden. Mocht je een linkje hebben, graag!

Everytime I suffer I become a better man because of it

Pagina: 1