PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   array schreiben und auslesen (http://www.selfphp.de/forum/showthread.php?t=8477)

MrLongbaugh 23.08.2004 16:23:33

array schreiben und auslesen
 
Hallo,

eine Liste (zur Navigation) soll aus einem Array ausgelesen werden.
Das Ergebnis soll so aussehen:

<ul>
<li><a href="#" class="daddy">Produkte</a>
<ul>
<li><a href="#">1</a>
</li>
<li><a href="#">2</a>
</li>
...
<li><a href="#">7</a>
</li>
</ul>
</li>
<li><a href="#" class="daddy">Tipps</a>
<ul>
<li><a href="#">Erfahrungsberichte</a></li>
<li><a href="#">Wartung</a></li>
<li><a href="#">FAQ</a></li>
</ul>
</li>


Nun möchte ich zuerst ein Array erstellen, welches dann ausgelesen wird und anschließend das HTML erstellt.

Ich möchte keine fertigen Lösungen. Vielleicht kann jmd. jedoch ein paar Ideen geben, wie das angehe.

Danke schon einmal.

MrLongbaugh

xabbuh 23.08.2004 17:37:53

Der Array könnte so aussehen:

PHP-Code:

<?php
    $navi 
= array(
                
"Produkte" => array(
                                    
"1",
                                    
"2"
                                
),
                
"Tipps"    => array(
                                    
"Erfahrungsberichte",
                                    
"Wartung"
                                
)
            );
?>

Für jeden Obermenüpunkt hat das Array also ein Element, wenn Untertypen existieren, wird für dieses Element wieder ein Array angelegt.

Die Ausgabe kann dann mit einer rekursiven Funktion erfolgen.

MrLongbaugh 23.08.2004 17:58:59

und wo wie kann ich die URL angeben?
 
An ein mehrdimensionales Array habe ich auch schon gedacht.
Wie kann ich jedoch zu dem Menuepunkt die URL dort unterbringen?

Danke schon einmal.

xabbuh 23.08.2004 18:10:09

Vielleicht so was:
PHP-Code:

<?php
    $navi 
= array(
                
"Produktion" => array(
                                    
"url"    => "produktion.php",
                                    
"subKat" => array(
                                                    
"1" => array(
                                                                
"url" => "1.php"
                                                            
),
                                                    
"2" => array
                                                                
"2.php"
                                                            
)
                                                )
                                )
            );
?>


MrLongbaugh 23.08.2004 18:23:10

kann ich das dann über ARRAYS abbilden?
 
Dein Vorschlag sieht nach einem Kunstgriff aus.
Sollte ich besser mit mehreren Arrays arbeiten?

Mit dem Einfügen der URL als 'url' und dann der Kategorie 'sub' bringe ich meine Struktur doch durcheinander, oder?

xabbuh 23.08.2004 18:33:30

Ich hätte gesagt, dass es funktioniert, wenn du ungefähr so die Funktion hast:

PHP-Code:

<?php
    
function CreateMenu($navi)
    {
        if(
is_array($navi)) {
            foreach(
$navi as $kat => $row) {
                echo 
'<ul>';
                echo 
'<a href="' $row['url'] . '">' $kat '</a>';

                if(
is_array($row['subKat'])) {
                    foreach(
$row['subKat'] as $subKat) {
                        
CreateMenu($subKat);
                    }
                }
                echo 
'</ul>';
            }
        }
    }
?>


MrLongbaugh 23.08.2004 18:45:42

danke. ich werde damit mal rumprobieren. danke für DEINE hilfe.
 
danke

MrLongbaugh 23.08.2004 20:04:00

Leider fehlt mir noch ein Teil
 
Bei den SubKategorien werden die Kategorien und die URLs nicht richtig ins HTML geschrieben.

Für '1' steht 'url' und für die URL steht '1'.
Habe verschiedenes probiert, komme jedoch nicht weiter.


PHP-Code:

    function CreateMenu($navi)

    {

        if(
is_array($navi)) {

            foreach(
$navi as $kat => $row) {

                echo 
'<ul><li>';
                echo 
'<a href="' $row['url'] . '">' $kat '</a></li>';



                if(
is_array($row['sub'])) {

                    foreach(
$row['sub'] as $subKat) {

                        
CreateMenu($subKat);

                    }

                }

                echo 
'</ul>';

            }

        }

    }

 
$navi = array(
    
"Produkte" => array(
        
"url"    => "produkte.php",
        
"sub" => array(
            
"1" => array( "url" => "1.php" ),
            
"2" => array( "url" => "2.php" )
                        )),
    
"Tips & Tricks" => array(
        
"url"  => "tips.php",
        
"sub" => array(
            
"1"  => array( "url" => "1.php" )
                        )));


CreateMenu($navi); 


xabbuh 23.08.2004 21:49:41

PHP-Code:

<?php
    
function CreateMenu($navi)
    {
        if(
is_array($navi)) {
            foreach(
$navi as $kat => $row) {
                echo 
'<ul><li>';
                echo 
'<a href="' $row['url'] . '">' $kat '</a></li>';
                
                if(
is_array($row['sub'])) {
                    
CreateMenu($row['sub']);
                }
                echo 
'</ul>';
            }
        }
    }

    
$navi = array(
                    
"Produkte" => array(
                                        
"url"    => "produkte.php",
                                        
"sub" => array(
                                                        
"1" => array(
                                                                    
"url" => "1.php"
                                                                
),
                                                        
"2" => array(
                                                                    
"url" => "2.php"
                                                                
)
                                                    )
                                    ),
                    
"Tips & Tricks" => array(
                                            
"url"  => "tips.php",
                                            
"sub" => array(
                                                            
"1"  => array(
                                                                            
"url" => "1.php"
                                                                        
)
                                                        )
                                        )
                                    );

CreateMenu($navi);
?>

In der Funktion war ein kleiner Fehler.

xabbuh 23.08.2004 21:56:41

Sehr schön wäre das Ganze auch mit Hilfe einer Datenbank möglich:

Tabelle navi:
id int(11) auto_increment
topmenu int(11) NOT NULL default '0'
label varchar(255)
url varchar(255)

Wenn die Spalte topmenu 0 ist, bedeutet dies, dass dieser Link die oberste Kategorie ist. Ansonsten steht in topmenu die Idee des Links, dem dieser Link untergeordnet ist.

PHP-Code:

<?php
    $sql 
"SELECT
                id,
                topmenu,
                label,
                url
            FROM
                navi
            ORDER BY
                id"
;
    
$result mysql_query($sql);
    while(
$row mysql_fetch_array($result)) {
        
$menudetails[$row['id']] = $row;
        
$topmenu[$row['topmenu']] = $row['id'];
    }

    function 
CreateMenu($id)
    {
        echo 
'<ul>';
        echo 
'<li><a href="' $menudetails[$id]['url'] . '">' $menudetails[$id]['label'] . '</a>';

        if(
is_array($topmenu[$id])) {
            foreach(
$topmenu[$id] as $subKat) {
                
CreateMenu($subKat);
            }
        }
        echo 
'</ul>';
    }

    foreach(
$topmenu[0] as $topKat) {
        
CreateMenu($topKat);
    }
?>

Ungetestet, aber das Prinzip sollte klar werden.


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:30:56 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.