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:

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"

Dit stuur ik naar smarty in de variabele menudata.

Mijn (test)-template ziet er op dit moment als volgt uit:

{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}

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:

hoofd

sub

Ik moet echter krijgen:

3 A/V Reparatieparts
   3 Audio Parts
   4 Video parts
1 Halfgeleiders
   2 Fet
   1 Transistor

Kan iemand mij svp op weg helpen ?
Niemand die Smarty gebruikt zeker ?
http://phphulp.nl/faq/#24
Je topic staat hier nog maar twee uur, wacht dus effe.

Kleuter.
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.
En wat dacht je van dit forum als knowledgebase?
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:
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
                        )

                )

        )

)
@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

/* 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));



Template stukje

<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>
Ik heb geen noodzaak om nog een nivo dieper te gaan.
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.

Reageren