Dynamisch Menu

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pong Zor

Pong Zor

28/06/2010 20:21:00
Quote Anchor link
Ik loop als een tijde te kloten met een dynamisch menu en ik doe steeds iets mis, waarschijnlijk iets heel simpels.

Het idee is als volgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<ul>
   <li>Informatie
      <ul>
         <li>Subitem1</li>
      </ul>
   </li>
</ul>

Aan de voorkant kan ik hier een mooi dropdown menuutje van maken. Aan de achterkant echter wil ik dan men zelf de naam voor het hoofdmenu kan kiezen in dit geval Informatie

Ik zie het zo voor me:
Dropdown met Hoofdmenu/ Submenu
en een input veld met de naam

Als er gekozen wordt voor submenu dan moet er "live/ on the fly" gekozen kunnen worden waaraan dit submenu item gekoppeld wordt in dit geval informatie.

Nu ben ik hier al mee wezen stoeien en heb het volgende:

http://denniskallansee.nl/db.jpg

Nu heb ik een parent_id en een sub_id.

Parent id voor de naam van de hoofdcategorie
Sub id voor de menu items onder die categorie

Nu wil ik aan de achterkant dat dit weergegeven wordt, in dit geval

Home
- Submenu item 1

Contact
- Submenu item 1
- Submenu item 2
- Subemnu item 3

Nu krijg ik dat laatst niet voor elkaar!

Ik probeer het als volgt:

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
<?php

    // gegevens uit database halen
    $sql = "SELECT * FROM info_page ORDER BY sub_id ASC, sort_order ASC";
    $result = mysql_query($sql, $thecode) or die ('Kan gebruikersnaam niet controleren...<br />Misschien is er een probleem met de database...');
    
    // gegevens uit database halen
    $sql2 = "SELECT * FROM info_page ORDER BY sub_id ASC, sort_order ASC";
    $result2 = mysql_query($sql2, $thecode) or die ('Kan gebruikersnaam niet controleren...<br />Misschien is er een probleem met de database...');    

        if($row['position'] == "Hoofdmenu" && $row['sub_id'] == 0){
            echo '<tr><td colspan="9" class="first_title"><strong>' . $row['name'] . '</strong></td></tr>';
    
            while($row2 = mysql_fetch_array($result2)){             
                if($row2['sub_id'] != 0 && $row2['parent_id'] == $row2['sub_id']){
                    echo '<tr><td colspan="9" class="first_title">' . $row2['name'] . '</td></tr>';
                }
            }            
            
        }



?>


Nu gaat er het volgende mis

Aan de achterkant krijg ik nu een lijst met

Home
-Submenu item 1
-Submenu item 2
-Submenu item 3
-Submenu item 1
-Submenu item 2
-Submenu item 3
Contact

Opzich is dat ook nog wel logisch, want die while checked eerst of position Hoofdmenu is, wat zo is daarna gaat die in de andere while en vervolgens matched alles en toont hij netjes alles onder elkaar

Heeft iemand een idee hoe ik het goed kan laten tonen? Misschien met een switch case ofzo?

Hij moet dus zo getoond worden:

Home
-Submenu item 1
-Submenu item 2
-Submenu item 3

Contact
-Submenu item 1
-Submenu item 2
-Submenu item 3
 
PHP hulp

PHP hulp

25/04/2024 05:59:46
 
Ruben Portier

Ruben Portier

28/06/2010 23:00:11
Quote Anchor link
Volgens mij moet je in die while die alle menu items eruit haalt maken dat al die menu items worden gecontroleerd dat ze geen submenu zijn. En dan in de while zelf nog een while maar dan voor alle menus die alleen maar submenus zijn.

EDIT: Wat je dus beter zal doen is een nieuwe categorie toevoegen in je database tabel met submenu waar je dan waar 0 voor geen en waarde 1 voor submenu gebruikt.
Gewijzigd op 28/06/2010 23:01:33 door Ruben Portier
 
Piet Verhagen

Piet Verhagen

28/06/2010 23:44:43
Quote Anchor link
Wat bedoel je met voorkant / achterkant?
 
Pong Zor

Pong Zor

29/06/2010 00:09:56
Quote Anchor link
met voorkant/ achterkant bedoelde ik frontend / backoffice
 
Piet Verhagen

Piet Verhagen

29/06/2010 00:13:22
Quote Anchor link
Dennis Kallansee op 29/06/2010 00:09:56:
met voorkant/ achterkant bedoelde ik frontend / backoffice

Mooie dure woorden ... met voorkant bedoel je gewoon de website en met achterkant gewoon het CMS?

Zelf even iets gebouwd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
$sql1 = "SELECT id,name FROM info_page WHERE postion = 'Hoofdmenu'";
$result1 = mysql_query($sql1);
while($row1 = mysql_fetch_row($result1)) {
    echo $row1[1].'<br />';
    $sql2 = "SELECT name FROM info_page WHERE parent_id = ".$row1[0];
    $result2 = mysql_query($sql2);
    while($row2 = mysql_fetch_row($result2)) {
        echo '- '.$row2[0].'<br />';
    }
}

Zo iets moet het worden volgens mij als ik het een beetje volgen kan wat je wil.
Gewijzigd op 29/06/2010 00:25:31 door Piet Verhagen
 
Pong Zor

Pong Zor

29/06/2010 11:45:44
Quote Anchor link
Hey Piet,

Jaja als je niet goed kan programmeren moet je het maar op een andere manier verbloemen he ;)

Ik heb jou code iets aangepast het is nu zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
            $sql1 = "SELECT id, name FROM info_page WHERE position = 'Hoofdmenu'";
            $result1 = mysql_query($sql1, $thecode);
            while($row1 = mysql_fetch_row($result1)) {
                echo $row1[1].'<br />';
                $sql2 = "SELECT name FROM info_page WHERE position = 'Submenu' AND parent_id = ".$row1[0];
                $result2 = mysql_query($sql2, $thecode);
                while($row2 = mysql_fetch_row($result2)) {
                    echo '- '.$row2[0].'<br />';
                }
            }


Dit werkt enigzins ik krijg nu:

U bevindt zich hier: Content beheer
Home
- Subitem 1
- Subitem 2
- Subitem 3
Contact

Waarom worden de items onder Contact niet meegenomen nu?

edit

Heb het gefixed, je haalde het id uit de database alleen heb ik de parent_id nodig uiteindelijke 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
        <?php    
            $sql1
= "SELECT parent_id, name FROM info_page WHERE position = 'Hoofdmenu'";
            $result1 = mysql_query($sql1, $thecode);
            while($row1 = mysql_fetch_row($result1)) {
                echo $row1[0].'<br />';
                echo $row1[1].'<br />';
                $sql2 = "SELECT name FROM info_page WHERE position = 'Submenu' AND parent_id = ".$row1[0];
                $result2 = mysql_query($sql2, $thecode);
                while($row2 = mysql_fetch_row($result2)) {
                    echo '- '.$row2[0].'<br />';
                }
            }

?>
Gewijzigd op 29/06/2010 11:52:57 door Pong Zor
 
Piet Verhagen

Piet Verhagen

29/06/2010 13:03:14
Quote Anchor link
Nee ... ik deed het niet verkeerd, maar jij denkt anders, naar mijn mening verkeerd. Bij 'Submenu'-regels zou het parent_id moeten verwijzen naar het id van een 'Hoofdmenu'-regel. Bij 'Hoofdmenu'-regels zou het parent_id leeg moeten zijn, immers die hebben geen parent. Zo denk ik erover.
 
Pong Zor

Pong Zor

29/06/2010 15:23:34
Quote Anchor link
Ja klopt! Ik had het inderdaad helemaal verkeerd, in ieder geval het werkt nu veel kudo's/ php tags voor jouw!
 



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.