Pagina's in database naar array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Daan

Daan

09/03/2007 16:43:00
Quote Anchor link
Hey iedereen,

Ik ben bezig met een website waar alle pagina's in een database staan met deze kolomen:
  • id - Een auto-increment waarde
  • name - De naam van de pagina
  • href - De url van de pagina
  • parent - Waar deze pagina een subpagina van is


De laatste kolom heeft misschien een beetje uitleg nodig:
Stel je hebt de pagina help met als id 23. Deze help-pagina heeft 3 subpagina's: 'over deze site', 'FAQ' en 'Contact'. Dan hebben de 3 subpagina's in hun parent de id van help (23) staan. Omdat er geen pagina boven de help-pagina staat, heeft hij de waarde 0 (kan ik ook NULL van maken, maakt niet uit).

Mijn vraag is: Hoe kan ik dit in een array van dit formaat krijgen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
Array (
    [0] = Array (
        ['help'] = "/help.php",
        ['over deze site'] = "/help/overdezesite.php",
        ['FAQ'] = "/help/faq.php",
        [0] = Array (
            ['contact'] = "/help/contact.php",
            ['via e-mail'] = "/help/contact.php?x=email",
            ['via telefoon'] = "/help/contact.php?x=telefoon"
        )
    )
)


In de database staan wel alle pagina's en subpagina's door elkaar, maar je kunt ze in je query natuurlijk sorteren.

Als ik de query heb, kan ik zelf wel het menu eromheen bouwen, maar ik kom nu echt niet verder.

Jullie hoeven voor mij niet een heel script te schrijven, maar een duuwtje in de goede richting kan ik goed gebruiken.

Alvast bedankt,
Daan
 
PHP hulp

PHP hulp

21/11/2024 23:32:48
 
Arjan Kapteijn

Arjan Kapteijn

09/03/2007 16:53:00
Quote Anchor link
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
<?php
$query
    = "SELECT id, name, href FROM content WHERE parent = 0 ORDER BY naam";
$result = mysql_query($query);

if($result && mysql_num_rows($result) > 0)
{

    echo '<ul id="menulijst">'."\n\r";
    
    while($row = mysql_fetch_array($result))
    {

        $id     = $row['id'];
        $name     = $row['name'];
        $href     = $row['href'];
        
        $query2 = "SELECT name, href FROM content WHERE parent = ".$id." ORDER BY naam";
        $result2 = mysql_query($query2);
        
        if($result2 && mysql_num_rows($result2) > 0)
        {

            echo '<li><a href="?'.$href.'">'.ucfirst($name).'</a>'."\n\r";
        
            echo '<ul>'."\n\r";
            
            while($row2 = mysql_fetch_array($result2))
            {

                $id2         = $row2['paginaid'];
                $name2         = $row2['name'];
                $href2         = $row2['href'];
                
                echo '<li><a href="'.$href2.'">'.ucfirst($name2).'</a></li>'."\n\r";
            }

            
            echo '</ul>'."\n\r";
            echo '</li>'."\n\r";
        }
else{
            echo '<li><a href="'.$href.'">'.ucfirst($name).'</a></li>'."\n\r";
        }    
    }

    echo '</ul>'."\n\r";
}

?>


Zelf nog even debuggen, maar ik denk dat je hier een heel eind mee bent. Dit gaat overigens maar één niveau diep. Zal er nog een maken voor het 'oneindige'.
Gewijzigd op 01/01/1970 01:00:00 door Arjan Kapteijn
 
Arjan Kapteijn

Arjan Kapteijn

09/03/2007 16:58:00
Quote Anchor link
Deze zou (in theorie) oneindig diep moeten gaan.

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
<?php
function menu_category($parent)
{

    $query     = "SELECT id, name, href FROM content WHERE parent = ".$parent;
    $result = mysql_query($query);
    
    if($result && mysql_num_rows($result) > 0)
    {

        echo '<ul>';
        
        while($row = mysql_fetch_array($result))
        {

            $id     = $row['id'];
            $name    = $row['name'];
            $href    = $row['href'];
            
            echo '<li><a href="'.$href.'">'.ucfirst($name).'</a>';
            
            menu_category($id);
            
            echo '</li>';
        }
        
        
        echo '</ul>';
    }
}

?>
 
Daan

Daan

09/03/2007 17:00:00
Quote Anchor link
He tnx..

m'n bedoeling is om het in een array te zetten, ipv meteen te echoen. Maar met eerst de parents ophalen en daarna alle subpages daarvan is een goed idee! Dat had van mij kunnen zijn.. :p

K zat zelf alleen maar te kijken naar een manier om eerst alles binnen te halen en daarna pas in de array te zetten, maar dat blijkt lastig te zijn :p

Ga zelf nog ff prutsen, bedankt voor je nieuwe inspiratie!
Gewijzigd op 01/01/1970 01:00:00 door Daan
 
Joren de Wit

Joren de Wit

09/03/2007 19:30:00
Quote Anchor link
Je kunt het natuurlijk ook in een array zetten zonder te echoen. Vervang:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$id
     = $row['id'];
$name    = $row['name'];
$href    = $row['href'];
?>

Bijvoorbeeld door:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$content
[$row['id']] = array('naam' => $row['name'], 'href' => $row['href']);
?>

Je krijgt nu alles in een multidimensionale array $content met als key het id uit de tabel en als waarde behorend bij die key weer een array met daarin 'naam' en 'href'.
 



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.