Laat ik allereerst even vermelden dat ik mijn programeer "kennis" heb verzameld uit boeken, internet en het nodige trial & error werk. Momenteel ben ik aan de studie Informatica begonnen op HBO niveau, maar we zijn pas 2 maanden bezig en nog niet aan het programmeren. Ik heb er dus nooit les in gehad en ken daardoor alleen de dingen die ik ooit zelf nodig heb gehad.
Adhv het script van de tweakblog van crisp (Crisp's blog: Formatting a multi-level menu using only one query) heb ik mijn menu structuur ontwikkelt in mijn CMS. Echter wil ik nu dat script ook gebruiken voor een webshop.
In principe zijn de categorien op de website ook menu items, dus in zo verre klopt het gewoon. Alleen, zoals de titel al aangeeft, wil ik er dus producten onder kunnen plaatsen.
Ik kom er alleen helemaal niet uit, en snap nog niet eens alles van het originele script eigenlijk. Het kan dus zijn dat mijn aanpassingen aan het origineel niet altijd even netjes zijn.
Wat ik tot nu toe heb:
Met een print_r($menuData); krijg ik van alle 3 de array's de waarden goed te zien. Maar ik krijg met geen mogelijkheid de producten onder de menu-kopjes (categorien).
Ik ben er al uren mee bezig geweest, maar kom er gewoon niet uit. Vanwege het ontbreken van een opleiding mis ik ook nog de nodige basiskennis. Sommige dingen zag ik in dit script pas voor het eerst, en zijn dan erg lastig te begrijpen. Bijvoorbeeld:
Is niet zo 1, 2, 3 te snappen met http://php.net/manual/en/function.isset.php en http://php.net/manual/en/control-structures.foreach.php als voorbeelden.
Ik heb al heel veel geprobeerd met het vervangen van de array parents door products, maar er moet dan een 0 waarde zijn, en de producten zitten nou eenmaal niet aan een categorie met parent_id 0 gekoppeld, dus volgens mij gaat dit nooit werken.
De categorien staan dus in de ene tabel, en de producten in de andere. In de tabel products staan in de kolom categories de id's (momenteel overal nog 1, maar worden er meerdere) van de categorien waar ze bij horen.
Los van te omschrijven wat mijn einddoel is, wat ik hierboven heb gedaan, weet ik niet goed waar ik om moet vragen, ik zit gewoon vast op het moment.
Een kant-en-klaar script is altijd makkelijk
maar daar ben ik niet naar op zoek. Ik hoop er met wat tips en aanwijzingen zelf uit te kunnen komen. Eventueel links naar (gedeeltelijke) oplossingen zijn dus welkom, zodat ik zelf daarna verder kan puzzelen.
Als er nog meer informatie nodig is hoor ik het graag. Hopelijk kan iemand mij verder helpen. Bij voorbaat dank!
Adhv het script van de tweakblog van crisp (Crisp's blog: Formatting a multi-level menu using only one query) heb ik mijn menu structuur ontwikkelt in mijn CMS. Echter wil ik nu dat script ook gebruiken voor een webshop.
In principe zijn de categorien op de website ook menu items, dus in zo verre klopt het gewoon. Alleen, zoals de titel al aangeeft, wil ik er dus producten onder kunnen plaatsen.
Ik kom er alleen helemaal niet uit, en snap nog niet eens alles van het originele script eigenlijk. Het kan dus zijn dat mijn aanpassingen aan het origineel niet altijd even netjes zijn.
Wat ik tot nu toe heb:
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
| <?php $menu = mysql_query("SELECT id, name, title, parent_id, order_id FROM categories WHERE ID != 4 ORDER BY order_id, parent_id, name ASC"); $product= mysql_query("SELECT id, name, title, categories FROM products ORDER BY name ASC"); $menuData = array( 'items' => array(), 'parents' => array(), 'products' => array() ); while ($menuItem = mysql_fetch_assoc($menu)) { $menuData['items'][$menuItem['id']] = $menuItem; $menuData['parents'][$menuItem['parent_id']][] = $menuItem['id']; } while ($menuItem = mysql_fetch_assoc($product)) { $menuData['products'][$menuItem['id']] = $menuItem; } function buildMenu2($parent_id, $menuData, $depth=0) { $html = ''; if (isset($menuData['parents'][$parent_id])) { foreach ($menuData['parents'][$parent_id] as $itemId) { $jump = 24 * $depth; if ($depth == '0') { $open = '<div style="float: left; width: 853px; height: 30px; line-height: 30px; font-weight: bold; padding-left: 5px; background-color: #d9f2cc; border-right: 1px solid #d9d9d9;">'; $close = '</div><div style="float: left; width: 80px; height: 30px; line-height: 30px; text-align: center; background-color: #d9f2cc; border-right: 1px solid #d9d9d9;">XX</div>'; } else { $width = 858 - $jump; $open = '<div style="float: left; width: '.$width.'px; height: 30px; line-height: 30px; font-weight: bold; padding-left: '.$jump.'px; background-color: #e5e5e5; border-right: 1px solid #d9d9d9;">'; $close = '</div><div style="float: left; width: 80px; height: 30px; line-height: 30px; text-align: center; background-color: #d9f2cc; border-right: 1px solid #d9d9d9;">XX</div>'; } $html .= $open . $menuData['items'][$itemId]['title'] . $close; $html .= buildMenu2($itemId, $menuData, $depth+1); } } return $html; } echo buildMenu2(0, $menuData); ?> |
Met een print_r($menuData); krijg ik van alle 3 de array's de waarden goed te zien. Maar ik krijg met geen mogelijkheid de producten onder de menu-kopjes (categorien).
Ik ben er al uren mee bezig geweest, maar kom er gewoon niet uit. Vanwege het ontbreken van een opleiding mis ik ook nog de nodige basiskennis. Sommige dingen zag ik in dit script pas voor het eerst, en zijn dan erg lastig te begrijpen. Bijvoorbeeld:
PHP:
1
2
3
4
5
| <?php if (isset($menuData['parents'][$parent_id])) { foreach ($menuData['parents'][$parent_id] as $itemId) { ?> |
Is niet zo 1, 2, 3 te snappen met http://php.net/manual/en/function.isset.php en http://php.net/manual/en/control-structures.foreach.php als voorbeelden.
Ik heb al heel veel geprobeerd met het vervangen van de array parents door products, maar er moet dan een 0 waarde zijn, en de producten zitten nou eenmaal niet aan een categorie met parent_id 0 gekoppeld, dus volgens mij gaat dit nooit werken.
De categorien staan dus in de ene tabel, en de producten in de andere. In de tabel products staan in de kolom categories de id's (momenteel overal nog 1, maar worden er meerdere) van de categorien waar ze bij horen.
Los van te omschrijven wat mijn einddoel is, wat ik hierboven heb gedaan, weet ik niet goed waar ik om moet vragen, ik zit gewoon vast op het moment.
Een kant-en-klaar script is altijd makkelijk
Als er nog meer informatie nodig is hoor ik het graag. Hopelijk kan iemand mij verder helpen. Bij voorbaat dank!