Dynamisches Menü mit PHP
Jürgen Peterson
- php
0 minicrispie0 ChrisB0 Jürgen Peterson0 ChrisB0 Jürgen Peterson0 ChrisB
1 Felix Riesterer
Guten Tag zusammen,
ich habe ein Problem mit meinem Menü, welches ich gern per PHP generieren möchte.
Dazu habe ich ein zweidimensionales Array mit den Inhalten. Das ist wie folgt aufgebaut:
$ary_nav = array(
array("home", "index.php", 0),
array("Punkt", "punkt.php", 0),
array("punkt1", "unter1.php", 1),
array("punkt2", "unter2.php", 1),
array("Kontakt", "kontakt.php", 0),
array("Mail", "kunter1.php", 1),
array("Adresse", "kunter2.php", 1)
);
Das Array wird in der gleichen Funktion mit einem foreach durchlaufen.
~~~php
foreach ($ary_nav as $aktuell => $value)
{
echo insert_link($value[0], $value[1], $value[2]);
}
In der Funktion insert\_link soll nun ausgewertet werden und das Ergebnis dann an die obere Funktion weitergegeben werden.
Soweit auch alles gut, nur hab ich da ein Problem mit der Formatierung.
Ich brauche am Ende folgende Struktur:
Alle Arrayelmente mit Index3 = 0 müssen in ein <div></div>. Gibt es jedoch darauffolgende Arrayelemente mit dem Index3 = 1, müssen die IN den Div Container.
Weiss jemand wie man das machen kann?
Vielen Dank schonmal im Vorraus!
Jürgen Peterson
Hallo,
Alle Arrayelmente mit Index3 = 0 müssen in ein <div></div>. Gibt es jedoch darauffolgende Arrayelemente mit dem Index3 = 1, müssen die IN den Div Container.
hä? So, wie ich den Satz verstehe müssen Elemente, deren Index3 0 oder 1 ist, in ein Div ...
meinst du das wirklich oder verstehe ich dich falsch?
MfG. Christoph Ludwig
Hi,
Alle Arrayelmente mit Index3 = 0 müssen in ein <div></div>. Gibt es jedoch darauffolgende Arrayelemente mit dem Index3 = 1, müssen die IN den Div Container.
Div schliessen, wenn Index gleich 0 und bereits Div offen.
Div oeffnen, wenn Index gleich 0.
Am Ende ggf. offenes Div schliessen.
MfG ChrisB
Div schliessen, wenn Index gleich 0 und bereits Div offen.
Div oeffnen, wenn Index gleich 0.
Am Ende ggf. offenes Div schliessen.
Dem kann ich irgendwie nicht folgen.
Kannst du das eventuell etwas genauer erläutern?
Vielen Dank!
Hi,
Div schliessen, wenn Index gleich 0 und bereits Div offen.
Div oeffnen, wenn Index gleich 0.
Am Ende ggf. offenes Div schliessen.Dem kann ich irgendwie nicht folgen.
In wie fern nicht?
Kannst du das eventuell etwas genauer erläutern?
Erst, wenn du beschreibst, was du daran nicht verstehst.
MfG ChrisB
Erst, wenn du beschreibst, was du daran nicht verstehst.
Gerne :).
Also in meiner foreach Schleife wird ja meine Funktion (wo die Auswertung stattfindet) jeweils einmal für jedes Element des Arrays augerufen.
Jetzt habe ich in meiner Auswertungsfunktion (nennen wir sie mal insert_link) genau 3 Werte mit denen ich arbeiten kann, eben die drei, die mir die foreach übergeben hat.
Wie kann ich daraus jetzt vernünftig meine Struktur basteln?
Schritt1: Ich gucke ob der Index 0 ist. Passt, also div öffnen und die ersten beiden Werte rein, sprich Link und Linktext. Div zu, denn jetzt kommt ja schon das Zweite Element mit Index 0.
Schritt2: Gucken ob der Index 0 ist. Passt, also passiert das gleiche wie bei Schritt1. Problem: Div geht wieder zu. Soll es aber nicht. Sollen ja noch die beiden weiteren Elemente mit Index1 rein. Dann erst Div zu.
Ich komme ja nicht an die weiteren Werte in dieser Funktion, da mir ja nur die 3 aktuellen Werte bereitstehen.
Oder stehe ich jetzt irgendwie komplett auf dem Schlauch?
Gruß
Jürgen
Hi,
Schritt1: Ich gucke ob der Index 0 ist. Passt, also div öffnen und die ersten beiden Werte rein, sprich Link und Linktext. Div zu, denn jetzt kommt ja schon das Zweite Element mit Index 0.
Nein, nicht Div zu - denn noch weisst du nicht, welcher Index-Wert als naechstes kommt.
Schritt2: Gucken ob der Index 0 ist. Passt, also passiert das gleiche wie bei Schritt1. Problem: Div geht wieder zu. Soll es aber nicht. Sollen ja noch die beiden weiteren Elemente mit Index1 rein. Dann erst Div zu.
Eben, deshalb so wie von mir beschrieben vorgehen.
MfG ChrisB
Eben, deshalb so wie von mir beschrieben vorgehen.
Es blöd klingen, aber ich versteh es immer noch nicht.
Um es mal zu verdeutlichen hier mein Quelltext:
if ($ebene == 0)
{
$result = '<div class="holder"><a href="'.$value.'">'.$key.'</a>';
}
if ($ebene == 1)
{
$result = '<a class="inner" href="'.$value.'">'.$key.'</a>';
}
Also ich komme rein in die Funktion, die erste Bedingung passt (index = 0), also div öffnen.
Zeite Bedingung passt demnach nicht.
Wenn ich jetzt aber nochmal einen Vergleich ob ebene = 0 ist mache, geht das beim Zweiten Durchgang nichtmehr.
Da hätte ich dann wieder ein schießendes div zuviel.
Dem Quelltext oben nach, hätte ich ja garkeins.
Gruß
Jürgen
Hi,
Wenn ich jetzt aber nochmal einen Vergleich ob ebene = 0 ist mache, geht das beim Zweiten Durchgang nichtmehr.
Da hätte ich dann wieder ein schießendes div zuviel.
Der allererste Schritt meines Vorgehens lautete:
Div schliessen, wenn Index gleich 0 und bereits Div offen.
MfG ChrisB
Der allererste Schritt meines Vorgehens lautete:
»» > Div schliessen, wenn Index gleich 0 und bereits Div offen.
Wie prüfe ich denn ob ein Div bereits offen ist?
Gruß
Jürgen
echo $begrüßung;
Wie prüfe ich denn ob ein Div bereits offen ist?
Das musst du dir aus dem vorherigen Durchlauf merken.
echo "$verabschiedung $name";
Lieber Jürgen,
$ary_nav = array(
array("home", "index.php", 0),
array("Punkt", "punkt.php", 0),
array("punkt1", "unter1.php", 1),
array("punkt2", "unter2.php", 1),
array("Kontakt", "kontakt.php", 0),
array("Mail", "kunter1.php", 1),
array("Adresse", "kunter2.php", 1)
);
Dein Array versucht eine verschachtelte Navigation abzubilden. Dabei gibt es im Prinzip eine Art Baumstruktur, in der die Links enthalten sein sollen.
Navi
| - Home
| - Punkt
| | - Punkt1
| | - Punkt2
| -Kontakt
| | - Mail
| | - Adresse
Ist es nicht so? Und warum bildet dann Dein Array diese Struktur nicht genau so ab?
~~~php
$ary_nav = array(
"Home" => array(
"link" => "index.php"
),
"Punkt" => array(
"link" => "punkt.php",
"weitere" => array(
"Punkt1" => array(
"link" => "unter1.php"
),
"Punkt2" => array(
"link" => "unter2.php"
)
)
),
"Kontakt" => array(
"link" => "kontakt.php",
"weitere" => array(
"Mail" => array(
"link" => "kunter1.php"
)
"Adresse" => array(
"link" =>"kunter2.php"
)
)
)
);
Ich habe jeden Link in Deiner Navi als ein Array definiert, welches bis zu zwei Indices haben kann:
1.) "link" mit der URL des Links, und eventuell
2.) "weitere", in dem ein Array mit möglichen anderen Link-Arrays steckt, die ihrerseits wiederum ebenso aufgebaut sind (also auch "link" und "weitere" haben können).
Was Du nun zum Auswerten dieses Arrays benötigst, ist eine (rekursive?) Funktion, die Dir diese verschachtelte Struktur in ein sinnvolles HTML-Konstrukt umwandelt. Und was das vermeintliche "div" angeht, schaue lieber nocheinmal hier herein: <http://de.selfhtml.org/css/layouts/navigationsleisten.htm@title=CSS-basierte Navigationsleisten>
Liebe Grüße,
Felix Riesterer.