hulp gevraagd met smarty-probleempje
Dag heren,
Ik heb een probleempje waar ik niet uit kom, ligt ongetwijfeld aan mij.
Wat is het geval: Ik heb een menu met hoofdcategeorie-en en subcategorie-en wat ik wil weergeven. Een genest menu dus.
Ik heb met php gegevens uit een database opgevraagd en dat gaf als resultaat:
Dit stuur ik naar smarty in de variabele menudata.
Mijn (test)-template ziet er op dit moment als volgt uit:
Ik krijg echter met geen enkele mogelijkheid de hoofdkategorie-en met daarbij de subkategorie-en op volgorde te zien.
Het resultaat wat ik nu krijg is:
Ik moet echter krijgen:
Kan iemand mij svp op weg helpen ?
Ik heb een probleempje waar ik niet uit kom, ligt ongetwijfeld aan mij.
Wat is het geval: Ik heb een menu met hoofdcategeorie-en en subcategorie-en wat ik wil weergeven. Een genest menu dus.
Ik heb met php gegevens uit een database opgevraagd en dat gaf als resultaat:
Code (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
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
Array (2)
hoofd => Array (2)
0 => Array (3)
main_id => "3"
maincat_desc => "A/V reparatieparts"
publish => "1"
1 => Array (3)
main_id => "1"
maincat_desc => "Halfgeleiders"
publish => "1"
sub => Array (4)
0 => Array (5)
subcat_id => "3"
main_id => "3"
subcat_desc => "Audio parts"
referer => "#"
publish => "1"
1 => Array (5)
subcat_id => "4"
main_id => "3"
subcat_desc => "Video parts"
referer => "#"
publish => "1"
2 => Array (5)
subcat_id => "2"
main_id => "1"
subcat_desc => "Fet"
referer => "#"
publish => "1"
3 => Array (5)
subcat_id => "1"
main_id => "1"
subcat_desc => "Transistor"
referer => "#"
publish => "1"
hoofd => Array (2)
0 => Array (3)
main_id => "3"
maincat_desc => "A/V reparatieparts"
publish => "1"
1 => Array (3)
main_id => "1"
maincat_desc => "Halfgeleiders"
publish => "1"
sub => Array (4)
0 => Array (5)
subcat_id => "3"
main_id => "3"
subcat_desc => "Audio parts"
referer => "#"
publish => "1"
1 => Array (5)
subcat_id => "4"
main_id => "3"
subcat_desc => "Video parts"
referer => "#"
publish => "1"
2 => Array (5)
subcat_id => "2"
main_id => "1"
subcat_desc => "Fet"
referer => "#"
publish => "1"
3 => Array (5)
subcat_id => "1"
main_id => "1"
subcat_desc => "Transistor"
referer => "#"
publish => "1"
Dit stuur ik naar smarty in de variabele menudata.
Mijn (test)-template ziet er op dit moment als volgt uit:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
{foreach from=$menudata item=maincat key=main_id}
{$main_id}{$maincat_desc}
{foreach from=$catitem item=subcat}
{$subcat.subcat_id}
{$subcat.subcat_desc}<br>
{/foreach}
<br><br>
{/foreach}
{$main_id}{$maincat_desc}
{foreach from=$catitem item=subcat}
{$subcat.subcat_id}
{$subcat.subcat_desc}<br>
{/foreach}
<br><br>
{/foreach}
Ik krijg echter met geen enkele mogelijkheid de hoofdkategorie-en met daarbij de subkategorie-en op volgorde te zien.
Het resultaat wat ik nu krijg is:
Ik moet echter krijgen:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
3 A/V Reparatieparts
3 Audio Parts
4 Video parts
1 Halfgeleiders
2 Fet
1 Transistor
3 Audio Parts
4 Video parts
1 Halfgeleiders
2 Fet
1 Transistor
Kan iemand mij svp op weg helpen ?
Gewijzigd op 01/01/1970 01:00:00 door Marcel K
Gesponsorde koppelingen:
Niemand die Smarty gebruikt zeker ?
http://phphulp.nl/faq/#24
Je topic staat hier nog maar twee uur, wacht dus effe.
Kleuter.
Je topic staat hier nog maar twee uur, wacht dus effe.
Kleuter.
Gewijzigd op 01/01/1970 01:00:00 door Karl Karl
bump.
Zo te zien gebruikt niemand Smarty, dus dan hoef ik de oplossing die ik ondertussen gevonden heb hier ook niet meer te zetten.
Hartelijk dank weer.
Voor de modjes: sluit deze topic maar svp.
Hartelijk dank weer.
Voor de modjes: sluit deze topic maar svp.
En wat dacht je van dit forum als knowledgebase?
Dan kan je de oplossing zeker wel posten.
En waarom dit topic sluiten?
Dan kan je de oplossing zeker wel posten.
En waarom dit topic sluiten?
Ten eerste, er zijn er zeker wel die smarty gebruiken (o.a. ik).
Ten tweede kan het altijd handig zijn om dergelijke oplossingen te vermelden.
Ten derde zou ik de structuur van je array's anders gedaan hebben, zodat je WEL makkelijk met Smarty dit kon weergeven. Jij gaf namelijk 2 losse lijstjes die verder niets met elkaar te maken hebben (jij denkt van wel, maar smarty weet dat niet). Indien je alles in 1 lijstje als bv zo iets zou gedaan hebben, waren je problemen meteen opgelost:
Ten tweede kan het altijd handig zijn om dergelijke oplossingen te vermelden.
Ten derde zou ik de structuur van je array's anders gedaan hebben, zodat je WEL makkelijk met Smarty dit kon weergeven. Jij gaf namelijk 2 losse lijstjes die verder niets met elkaar te maken hebben (jij denkt van wel, maar smarty weet dat niet). Indien je alles in 1 lijstje als bv zo iets zou gedaan hebben, waren je problemen meteen opgelost:
Code (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
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
Array
(
[0] => Array
(
[naam] => Parts
[id] => 3
[subs] => Array
(
[0] => Array
(
[naam] => Diode
[id] => 5
)
[1] => Array
(
[naam] => Transistor
[id] => 10
)
[2] => Array
(
[naam] => FET
[id] => 7
)
[3] => Array
(
[naam] => Thyristor
[id] => 8
)
)
)
[1] => Array
(
[naam] => Categoriƫn
[id] => 2
[subs] => Array
(
[0] => Array
(
[naam] => Halfgeleiders
[id] => 4
)
[1] => Array
(
[naam] => Audio
[id] => 9
)
[2] => Array
(
[naam] => Video
[id] => 6
)
)
)
)
(
[0] => Array
(
[naam] => Parts
[id] => 3
[subs] => Array
(
[0] => Array
(
[naam] => Diode
[id] => 5
)
[1] => Array
(
[naam] => Transistor
[id] => 10
)
[2] => Array
(
[naam] => FET
[id] => 7
)
[3] => Array
(
[naam] => Thyristor
[id] => 8
)
)
)
[1] => Array
(
[naam] => Categoriƫn
[id] => 2
[subs] => Array
(
[0] => Array
(
[naam] => Halfgeleiders
[id] => 4
)
[1] => Array
(
[naam] => Audio
[id] => 9
)
[2] => Array
(
[naam] => Video
[id] => 6
)
)
)
)
@Karl: Ik ben te oud om kleuter te zijn, ik denk dat ik zelfs oud genoeg ben om je vader te kunnen zijn..
Hou dergelijke opmerkingen svp maar voor je, het voegt niets toe aan dit forum.
@Hipska
1. no comment
2. zie hieronder
3. de structuur zoals ik liet zien is misschien niet geheel volgens de regels, maar die van jou gaat imho ook niet overeenkomen met hetgeen ik wil bereiken.
De oplossing hieronder werkt precies zoals ik het wil, daarmee wil ik niet zeggen dat het de enigste juiste oplossing is.
Ik sta open voor opbouwende kritiek.
Mijn oplossing:
PHP-stukje
Template stukje
Hou dergelijke opmerkingen svp maar voor je, het voegt niets toe aan dit forum.
@Hipska
1. no comment
2. zie hieronder
3. de structuur zoals ik liet zien is misschien niet geheel volgens de regels, maar die van jou gaat imho ook niet overeenkomen met hetgeen ik wil bereiken.
De oplossing hieronder werkt precies zoals ik het wil, daarmee wil ik niet zeggen dat het de enigste juiste oplossing is.
Ik sta open voor opbouwende kritiek.
Mijn oplossing:
PHP-stukje
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* Glossy Categorie-Menu inlezen */
/**********************************************************/
$sql = "SELECT * FROM cat_main WHERE publish='1' ORDER BY maincat_desc ASC";
if (!($result = $db->sql_query($sql)))
{
die('Could not obtain catmain-menu information');
}
while ($regel = $db->sql_fetchrow($result)) {
$hoofd[]= $regel;
$sql2="SELECT * FROM cat_sub WHERE main_id='".$regel['main_id']."' AND publish='1' ORDER BY subcat_desc";
if (!($result2 = $db->sql_query($sql2)))
{
die('Could not obtain catsub-menu information');
}
while ($regel2 = $db->sql_fetchrow($result2)) {
$sub[]=$regel2;
}
}
$smarty->assign(array('hoofdcats' => $hoofd,'subcats' => $sub));
/**********************************************************/
$sql = "SELECT * FROM cat_main WHERE publish='1' ORDER BY maincat_desc ASC";
if (!($result = $db->sql_query($sql)))
{
die('Could not obtain catmain-menu information');
}
while ($regel = $db->sql_fetchrow($result)) {
$hoofd[]= $regel;
$sql2="SELECT * FROM cat_sub WHERE main_id='".$regel['main_id']."' AND publish='1' ORDER BY subcat_desc";
if (!($result2 = $db->sql_query($sql2)))
{
die('Could not obtain catsub-menu information');
}
while ($regel2 = $db->sql_fetchrow($result2)) {
$sub[]=$regel2;
}
}
$smarty->assign(array('hoofdcats' => $hoofd,'subcats' => $sub));
Template stukje
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div class="glossymenu">
{foreach from=$hoofdcats item=maincat key=main_id}
<a class="menuitem submenuheader" href="#" class="ajaxify" target"#content">{$maincat.maincat_desc}</a>
<div class="submenu">
<ul>
{foreach from=$subcats item=subcat}
{if $maincat.main_id eq $subcat.main_id}
<li><a href="{$subcat.referer}" class="ajaxify" target"#content">{$subcat.subcat_desc}</a></li>
{/if}
{/foreach}
</ul>
</div>
{/foreach}
</div>
{foreach from=$hoofdcats item=maincat key=main_id}
<a class="menuitem submenuheader" href="#" class="ajaxify" target"#content">{$maincat.maincat_desc}</a>
<div class="submenu">
<ul>
{foreach from=$subcats item=subcat}
{if $maincat.main_id eq $subcat.main_id}
<li><a href="{$subcat.referer}" class="ajaxify" target"#content">{$subcat.subcat_desc}</a></li>
{/if}
{/foreach}
</ul>
</div>
{/foreach}
</div>
Je hebt het in 2 tabellen :O
Wat als je nu nog een niveau dieper wil gaan, ga je dan nog een tabel aanmaken? Niet echt handig..
Toevallig is hier net een aardige tutorial over geschreven
Wat als je nu nog een niveau dieper wil gaan, ga je dan nog een tabel aanmaken? Niet echt handig..
Toevallig is hier net een aardige tutorial over geschreven
Ik heb geen noodzaak om nog een nivo dieper te gaan.
Ik zal die tut eens bestuderen, bedankt voor de tip.
Ik zal die tut eens bestuderen, bedankt voor de tip.
Dat stukje template lijkt mij niet echt perfomant.
Voor elk hoofdmenu dat er bestaat ga jij telkens het lijstje met alle mogelijke submenu's overlopen. Dat lijkt me nogal veel vertraging en nutteloos serverload te genereren.
Voor elk hoofdmenu dat er bestaat ga jij telkens het lijstje met alle mogelijke submenu's overlopen. Dat lijkt me nogal veel vertraging en nutteloos serverload te genereren.
Hoe kan ik dit dan beter doen ?
Heb je een verbeterd voorstel ?
Ik ben maar een beginner, dus iedere hulp is welkom.
Heb je een verbeterd voorstel ?
Ik ben maar een beginner, dus iedere hulp is welkom.
Nou het lijkt me dat ik al een voorstel gedaan had.
En de tutorial die Willem-Jan voorstelde kan je ook eens doornemen.
En de tutorial die Willem-Jan voorstelde kan je ook eens doornemen.



