Menu structuur maken Mysql/PHP/Smarty

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Disksoft

Disksoft

06/09/2007 18:57:00
Quote Anchor link
Hallo,

Ik ben aan het stoeien met een menu structuur van uit een mysql database en dat via Smarty te laten verwerken.
Ik heb nu het volgende maar ik denk dat het veel makkelijker kan dan dit volgens mij doe ik nu acties die niet nodig zijn.

Het is de bedoeling dat die de menu items met parent = 0 als tablad boven aanzet.
De items die parrent = 1 hebben moeten als titel worden weergeven in het menu (in de afb. Meteen aan de slag en Meteen aan de slag (2), Test header)
De childeren daarvan dus als titel Meteen aan de slag het id 5 hebt moeten de items met parent = 5 er onder gezet worden.
In dit geval gebruikers beheren en groepen beheren.

Hopelijk is de uitleg duidelijk genoeg icm. de afbeelding onderaan deze post.
Overgens de code werkt wel maar volgens mij kan het korter en makelijker.

De code icm Smarty. (Smarty wordt geinclude en ik maak gebruik van een mysql class)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?
$tab
= array();

function
tabs($parent = '0', $i = 0) {
global $sql,  $smarty;
    $res = $sql->query("SELECT id, link, titel FROM menu WHERE parent=0 GROUP BY titel ORDER BY volgnr");
    
    while ($row = $sql->fetch_array($res, MYSQL_ASSOC)) {
        
        
        $tab[$i]['id'] = $row['id'];
        $tab[$i]['name'] = $row['titel'];
        $tab[$i]['link'] = $row['link'];
        $i++;

        $smarty->assign('contacts',$tab);
        $smarty->assign('tab',(isset($_GET['tab']) ? $_GET['tab'] : 1));
    }
}

function
drawMenu($parent=0,$i=0) {
global $sql,  $smarty;
    $res = $sql->query("SELECT o.id, o.parent, o.link, o.titel, count(i.titel) children FROM menu o LEFT JOIN menu i ON o.id = i.parent WHERE o.parent=".$parent." GROUP BY o.titel ORDER BY o.volgnr");

    while ($row = $sql->fetch_array($res, MYSQL_ASSOC)) {

        $tab[$i]['id'] = $row['id'];
        $tab[$i]['name'] = $row['titel'];
        $tab[$i]['link'] = $row['link'];
        

        $smarty->assign('contact',$tab);

            if ($row['children'] > 0) {
            $j=0;
            $resx = $sql->query("SELECT o.id, o.parent, o.link, o.titel FROM menu o WHERE o.parent=".$row['id']." GROUP BY o.titel ORDER BY o.volgnr");
                    while ($rowx = $sql->fetch_array($resx, MYSQL_ASSOC)) {
                        $tabx[$i][$j]['id'] = $rowx['id'];
                        $tabx[$i][$j]['name'] = $rowx['titel'];
                        $tabx[$i][$j]['link'] = $rowx['link'];
                        $smarty->assign('cont',$tabx);
                        $j++;
                        
                    }
            }

$i++;
    }

}


echo tabs();
echo drawMenu(isset($_GET['tab']) ? $_GET['tab'] : 1);
?>


De Smarty template code.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
    <div id="page-body">
        <div id="tabs">
            <ul>
                
            {section name=een loop=$contacts}
            {if $tab == $contacts[een].id}
            <li id="activetab"><a href="?tab={$contacts[een].id}"><span>{$contacts[een].name}</span></a></li>
            {else}
            <li><a href="?tab={$contacts[een].id}"><span>{$contacts[een].name}</span></a></li>
            {/if}
            {/section}
            </ul>
        </div>

        <div id="acp">
        <div class="panel">
            <span class="corners-top"><span></span></span>
                <div id="content">
                <div id="toggle">                      
                        <a id="toggle-handle" accesskey="m" title="#" onclick="switch_menu(); return false;" href="#"></a></div>
                    <div id="menu">
                        <p>Je bent ingelogd als:<br /><strong>Disksoft</strong> [&nbsp;<a href="#">Uitloggen</a>&nbsp;]</p>
                        <ul>


                        {section name=twee loop=$contact}
                        <li class="header">{$contact[twee].name}</li>

                        {section name=drie loop=$cont}
                        {if isset($cont[$smarty.section.twee.index][drie].name)}
                        <li><a href="#"><span>{$cont[$smarty.section.twee.index][drie].name}</span></a></li>
                        {/if}
                        {/section}
                        {/section}

                        </ul>
                    </div>
    
                    <div id="main">
                        {include file=$INCL_TEMPLATE}
                    </div>
                </div>
            <span class="corners-bottom"><span></span></span>
        </div>
        </div>
    </div>


Afbeelding

Mysql Structuur (voor evt. tests)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
CREATE TABLE IF NOT EXISTS `menu` (
  `id` int(11) NOT NULL auto_increment,
  `titel` varchar(255) NOT NULL,
  `link` varchar(255) NOT NULL,
  `parent` int(11) NOT NULL,
  `volgnr` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


Een oplossing mag gewoon met normale mysql querys, ik gooi ze zelf wel om naar mijn mysql class.
Gewijzigd op 01/01/1970 01:00:00 door Disksoft
 
Er zijn nog geen reacties op dit bericht.



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.