Ik ben bezig met een webwinkel script. Ik heb hier te maken met een categorie, subcategorie, subsubcategorie en producten. Voor elk van deze had ik eerst aparte bestanden, maar dat heb ik nu toch maar aangepast zodat het in 1 bestand kan. Nu krijg je dus iets van index.php?cat=22&subcat=54&subsubcat=122&product=820
Ik heb voor elk van deze 4 nog wel een apart PHP bestand, maar deze include ik dan in de index pagina. Nu is het zo dat afhankelijk van de pagina waar de bezoeker op zit, dat er bepaalde content getoond moet worden. Als hij bijvoorbeeld op de categorie pagina zit (cat=22), dan moet dus categorie.php geinclude worden. Als de bezoeker echter op een subcategorie pagina zit (cat=22&subid=54), dan moet de pagina subcatcategorie.php getoond worden. Dit gaat dan dus verder tot en met de product pagina (index.php?cat=22&subcat=54&subsubcat=122&product=820)
Nou is mijn vraag hoe ik er dus voor kan zorgen dat alleen de juiste content geladen wordt. Ik heb al dingen geprobeerd met isset, maar dan krijg ik het niet voor elkaar om maar 1 van de 4 bestanden te includen. Elke keer werd er dan namelijk ook wel een ander bestand geinclude. Kan iemand mij dus vertellen hoe ik het voor elkaar kan krijgen dat er maar 1 pagina geinclude wordt?
Iemand zei dat ik dat includen helemaal niet hoefde te doen. Hij zei dat ik gewoon de goeie query aan de hand van de GET variabelen moest aanmaken en de database de resultaten verder moest laten ophoesten. Klopt dit en weet iemand hoe dit dit dan moet? Ik heb zelf echt geen idee, krijg het totaal niet werkend en zit nu dus helemaal vast.
PS. Als je op een subcat, subsubcat of product pagina bent, dan moet het cat= altijd in de url staan. Afhankelijk van dit id wordt er namelijk een submenu open geklapt.
7 antwoorden
Gesponsorde links
Thomas - 23/08/2007 11:40 (laatste wijziging 23/08/2007 11:41)
Moderator
Hm, die cat, subcat en subsubcat klinkt een beetje als een boomstructuur. Heb je in je database ook 3 tabellen? En wie zegt dat je dadelijk niet meer niveaus (subsubsubcat?) wilt hebben? .
Het lijkt mij het makkelijkste om één tabel te hebben genaamd categorie, en hierin een kolom aanmaakt genaamd parent_categorie oid, zodat je "gelaagdheid" kunt aanbrengen. Eventueel zou je ook een "diepte" bij kunnen houden, die aangeeft of je te maken hebt met een categorie (parent_categorie == 0), subcategorie, subsubcategorie etc..
Producten kun je dan aan een cat_id hangen, ongeacht het "categorie-niveau".
Nou, die structuur heb ik dus ook precies! :-) Ik heb een tabel categorieen (id, naam, parent ) en een tabel producten (id, naam, cat_id <- primaire sluitel categorieen)
Nu is het dus zo dat ik op de index pagina een overzicht heb van de categorieen. Als je op 1 van deze categorieen klikt ga je naar een pagina met de betreffende subcategorieen. Als je daar dan weer op een subcategorie klikt ga je naar de subsubcategorieen. En ga zo maar door... De structuur is dus categorie > subcategorie > subsubcategorie > product.
Hoe kan ik deze pagina's / code nou het beste opbouwen. Zoals ik al zei krijgt ik het met index.php?cat=22&subcat=54&subsubcat=122&product=820 niet werkend. Het werkt echter ook niet als ik 4 losse bestanden maak, want dan krijg je bijvoorbeeld product.php?id=1 en dan werkt mijn submenu dus niet. Bij dat submenu moet namelijk het categorie ID bekent zijn.
Iemand zei dus dat ik dat includen helemaal niet hoefde te doen. Hij zei dat ik gewoon de goeie query aan de hand van de GET variabelen moest aanmaken en de database de resultaten verder moest laten ophoesten. Weet jij misschien hoe dit moet dan? Of weet je misschien een andere oplossing?
Ik zit hier echt helemaal vast en weet het dus echt niet meer.
Thomas - 23/08/2007 12:17 (laatste wijziging 23/08/2007 12:20)
Moderator
Hm, volgens mij hoef je maar 1 parameter mee te geven in je URL voor de (sub(sub))categorie, en evt 1 voor je product (als je een detailpagina bekijkt ofzo).
Voor het uitlezen van de boom heb je 1 query nodig als je dit op een handige manier doet (het rangschikken van de items doe je in PHP).
Vervolgens kijk je welke producten er bij een categorie-id horen als er niet expliciet een product-id is opgegeven.
query+sorteren is het "moeilijkste" lijkt me; ik heb een tijdje terug al een keer een fragmentje geplaatst met wat voorbeeldcode; zal het ff opzoeken.
Dat klopt in principe wel ja. In het begin kom je dus op de index pagina en zie je een overzicht van de categorieen. Stel dat je dan op de categorie sport klikt (categorie.php?id=2), dan kom je op een pagina met een overzicht van de subcategorieen in sport. Als je dan op tennis klikt (categorie.php?id=21) dan ga je naar het overzicht van tennisspullen. Vervolgens klik je op rackets (categorie.php?id=55) en je komt op het racketoverzicht. Daar selecteer je dan een racket en je komt op de product pagina (product.php?id=3).
Hoe kan ik dan echter aangeven dat hij bijvoorbeeld op de pagina waar alle categorieen staan een andere indeling moet geven dan bijvoorbeeld op de pagina waar het overzicht van rackets staat? De categorieen staan namelijk per 2 naast elkaar weergegeven terwijl de rackets allemaal onder elkaar staan weergegeven...
Sowieso moet ook eigenlijk altijd de hoofdcategorie (waar dus parent 0 is) bekend zijn. Dit omdat er altijd een menu aanwezig is dat hiervan afhankelijk is. Kom je op de begin pagina, dan staat deze helemaal ingeklapt. Als je echter in een bepaalde categorie zit, dan moet het menu bij de betreffende categorie open geklapt worden en daar moeten dan de subcategorieen geplaatst worden.
Ik hoop dat het nu een beetje duidelijk is.
Natuurlijk nu al bedankt voor je hulp, maar ik hoop natuurlijk ook dat je me nog verder wilt helpen. Ik kom er gewoon echt niet uit hoe ik het zo moet doen dat het systeem ziet wanneer hij wat moet weergeven.
Helaas snap ik daar ook niet echt wat van. Volgens mij heeft het ook niet direct met mijn vraag te maken. Kan natuurlijk ook dat ik het niet goed begrijp en het daarom bij het verkeerde eind heb. ;)
Mijn vraag is dus: Gezien het met beide manieren nog niet goed gaat, kan ik nou het beste met allemaal losse bestanden werken of kan ik beter alles in 1 bestand zetten.
Met losse bestanden weet ik dus niet hoe ik mijn hoofdmenu altijd goed kan houden, gezien het categorie id altijd bekend moet zijn.
Met 1 bestand wil ik afhankelijk van de $_GET (index.php?cat=22&subcat=54&subsubcat=122&product=820) iets includen. Als er dus alleen cat=22 staat moet hij alleen de categorie code tonen, als er cat=22&subcat=54 staat moet hij alleen de subcategorie code includen, etc...
Ik hoop dat iemand een opzetje kan geven van hoe ik te werk kan gaan. :-)
Thomas - 23/08/2007 15:18 (laatste wijziging 23/08/2007 15:19)
Moderator
Eerste "probleem" (op welke pagina zit je; of liever gezegd op wat voor pagina zit je).
Dit zou je in een aparte kolom van je categorie-tabel kunnen opslaan (cat_layout oid?) en op grond daarvan bouw je je pagina op een bepaalde manier op.
Tweede "probleem" (welke (sub)categorieën zijn opengeklapt.
Je zou in je $tree een 'parent'-index kunnen maken. Ik weet niet of die eea echt veel handiger maakt, maar je zou dan door door je boom heen te lopen kunnen kijken of er parents uitgeklapt moeten worden.
Beide vraagstukken spreken "problemen" aan die je krijgt bij het afdrukken van je gegevens. Als je datastructuur goed in elkaar zit ($tree), dan zijn deze dingen niet zo lastig. Je kunt hoe dan ook oplossingen bedenken die werken, en later zou je altijd nog eens kunnen kijken of het eleganter / efficiënter opgelost kan worden.
Zet eerst alles eens in zo'n tree, en ga daar dan mee aan de slag. Ik denk dat je dan al een heel eind bent.