[php/mysql] - cms menu opzet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Cavalera125
  • Registratie: December 2003
  • Laatst online: 21-09 11:15
Hoi,

ik ben bezig met een cms (de zoveelste). Ik zal even kort mijn huidige opzet uitleggen:

Ik heb een aantal modules. Bijvoorbeeld de module 'contentpage'. Deze module is voor het maken van standaard pagina's met tekst/plaatjes. Iedere module heeft een class en een mainfile. De class bevat alle functies die betrekking hebben op een contentpage, ook de adminfuncties. In de mainfile worden de acties geregeld, de mainfile van contentpage ziet er als volgt uit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
    $CP = new Mod_Contentpage();
        
    switch($_REQUEST['c_action']) {
        case 'showform': if(isset($_REQUEST['page_id'])) {
                                      $CP->showForm($_REQUEST['page_id']);}
                            else { $CP->showForm();}
            break;
        case 'add': $CP->add(array('title'=>$_POST['title'],
                                    'content'=>$_POST['content']));
            break;
        case 'delete': $CP->delete($_GET['page_id']);
            break;
        case 'showall': $CP->showAllPages();
            break;
        default: $CP->showPage($_GET['page_id']);
            break;
    }
    
?>


Iedere module heeft in de db zijn eigen tabel. De tabel mod_contentpage bevat:
code:
1
2
3
id
title
body.


De modules staan geregistreerd in de tabel modules. Met de velden:
code:
1
2
3
4
id
name
mainfile
active

Er is een tabel menu in de database waaraan de modules gekoppeld kunnen worden. Deze tabel bevat:
code:
1
2
3
4
5
6
7
id
label
mod_id
parent
extraurlvars
sort
active

In de index.php wordt alles afgehandeld. Het menu wordt opgebouwd uit de database. Een link naar een contentpage is dan als volgt:
index.php?menu_id=1&mod_id=1&page_id=1

In index.php wordt dan aan de hand van de mod_id de bijbehorende mainfile van die module opgehaald en ingeladen.

Nu zit ik dus met iets wat ik eigenlijk anders opgelost wil hebben. In de tabel menu staat namelijk extraurlvars. Daarin staat dus in het geval van een contentpage bijvoorbeel page_id=1. Omdat je meerdere contentpages kunt hebben moet de mainfile van contentpage wel weten welke page hij moet inladen. Ik heb het idee dat ik mijn menu gewoon fout opbouw.

Is er een andere manier om dit op te lossen? Ik zit er nu al een tijdje mee te prutsen, maar kom er niet echt uit. In principe werkt het zo dus wel, alleen is het voor een leek natuurlijk niet echt fijn als hij een veld voorgeschoteld krijgt waarin hij 'page_id=1' moet gaan plaatsen, of andere rare dingen. Ik heb ook al naar bestaande cms'n gekeken zoals cpgnuke. Maar die hebben voor zover ik zie geen modules in het menu staan die meerdere pagina's kunnen hebben.

Ik hoop dat deze post een beetje duidelijk is. Hij is langer geworden dan ik gehoopt had, mocht er iets opgehelderd moeten worden dan doe ik dat graag.

Acties:
  • 0 Henk 'm!

  • Cavalera125
  • Registratie: December 2003
  • Laatst online: 21-09 11:15
Is er misschien iemand die me een zetje in de goede richting kan geven?

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
Moet je menu "enkelvoudig" worden? Dus
home
gastenboek
shop

Of meer zoiets:
home
gastenboek
shop
|-overzicht
|-bestellen

In het 2de geval voldoet een tree in je database namelijk beter.

Acties:
  • 0 Henk 'm!

Verwijderd

Ik snap je nu niet helemaal, wil je een menu maken dat afhankelijk is van welke module is opgevraagd in de browser? Waar is dat veld extraurlvars dan voor?
En waarvoor is de code die je hebt gepost?

Misschien heb ik gewoon verkeerd gekeken maar ik snap je niet helemaal goed.

PS. Vergeet refernties niet in je code. Daardoor gaat PHP al sneller door.
dus ipv. $var = new Class; is het dan $var = & new Class;

Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Misschien dat dit interessant is om te lezen als je met tree's in je CMS met SQL gaat werken:

[rml][ mySql] boomstructuur[/rml]

:)

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
MisterData schreef op 08 juli 2004 @ 12:31:
Misschien dat dit interessant is om te lezen als je met tree's in je CMS met SQL gaat werken:

[rml][ mySql] boomstructuur[/rml]
:)
Nog een leuke link daarover: http://www.devshed.com/c/a/MySQL/MySQL-Table-Joins/4/

Acties:
  • 0 Henk 'm!

  • Cavalera125
  • Registratie: December 2003
  • Laatst online: 21-09 11:15
djluc schreef op 08 juli 2004 @ 10:19:
In het 2de geval voldoet een tree in je database namelijk beter.
Zoals je kunt zien in de tabel 'menu' is er een veld 'parent' aanwezig. Deze bevat het parent id. Het menu is dus een tree. Hoe dat uit te werken verder is geen probleem.

Het gaat om het volgende. In het menu komt dus bijvoorbeeld (even zonder tree):

pagina1 -> index.php?mod_id=1&page_id=1;
pagina2 -> index.php?mod_id=1&page_id=2;
gastenboek -> index.php?mod_id=2;

Normaal gesproken krijg je in het menu maar 1 instantie van een module te zien. Zoals dus het gastenboek. In mijn geval heb ik dus een module 'contentpage'. Dit is gewoon een pagina met informatie. Er kunnen meerdere pagina's gemaakt worden. Die meerdere pagina's kunnen ook in het menu getoont worden. De module_id van deze pagina's is voor alle pagina's hetzelfde, namelijk 1. Echter moet wel de juiste pagina geladen worden, dus heb ik dat op dit moment opgelost met die 'extraurlvars'. In het geval van pagina1 is dat dus 'page_id=1' en bij pagina2 'page_id=2'. Voor gastenboek is extraurlvars leeg.

Ik heb zelf het idee dat deze oplossing niet ideaal is. Ik heb het gevoel dat ik het databasemodel niet helemaal in elkaar gezet heb zoals het moet.

Acties:
  • 0 Henk 'm!

  • Cavalera125
  • Registratie: December 2003
  • Laatst online: 21-09 11:15
Is het wel verstandig om het menu in een aparte tabel te zetten? Kan ik niet beter het menu uitlezen uit de modules misschien ivm redundantie? Hoe doen jullie dit? Misschien gewoon met een 'inmenu' flag ofzo?

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
In je tree staan de gegevens van je menu al dus daar heb je geen aparte tabel voor nodig.
Ik begrijp je huidige aanpak nog niet helemaal maar volgens mij kan je idd beter from scratch beginnen om te kijken wat je wilt.

Je zou eens moeten kijken naar een post van gordijnstok over modules e.d. Die heeft een erg generieke opzet ooit gepost.

Acties:
  • 0 Henk 'm!

  • Cavalera125
  • Registratie: December 2003
  • Laatst online: 21-09 11:15
Ja die heb ik inderdaad gelezen, tenminste ik denk dat je deze bedoelt:
[rml]Gordijnstok in "[ cms/php] cms db opzet"[/rml]

Daar ben ik nu mee bezig om een andere db opzet te maken. Dat is wel heel anders dan hoe ik het nu heb...

[ Voor 7% gewijzigd door Cavalera125 op 09-07-2004 13:36 ]


Acties:
  • 0 Henk 'm!

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

alienfruit

the alien you never expected

Ja, maar volgens mij slaat GordijnStok dan alleen maar string waardes op in de database, want een datum of een getal als string (varchar) opslaan vindt ik nou zelf ook niet alles in een DB :)

Acties:
  • 0 Henk 'm!

  • Cavalera125
  • Registratie: December 2003
  • Laatst online: 21-09 11:15
Dat was ik mezelf ook al af aan het vragen hoe zoiets dan opgelost wordt. Waar ik iig wel achter ben is dat er toch veel bij komt kijken om een goede db structuur op te zetten voor zoiets. Ik ben er nog wel even zoet mee denk ik :)

Acties:
  • 0 Henk 'm!

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

alienfruit

the alien you never expected

Ja, praat me er niet van :-) Ik ben ook bezig met een nieuwe versie van cms, ik wil nu XML/XSLT ondersteunen.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
Cavalera schreef op 09 juli 2004 @ 15:00:
Dat was ik mezelf ook al af aan het vragen hoe zoiets dan opgelost wordt. Waar ik iig wel achter ben is dat er toch veel bij komt kijken om een goede db structuur op te zetten voor zoiets. Ik ben er nog wel even zoet mee denk ik :)
Ik ben er zelf mee gestopt en ben bezig om te leren hoe ik zelf extensions kanmaken voor Typo3. Dan heb ik een goede basis, iets wat bij zelf-ontwikkelen veel te lang duurt en te ingewikkeld is, en kan ik snel mooie dingen bouwen.
Pagina: 1