| | | | |
| |||||||
| Beitragsarchiv Nur gucken, nichts anfassen. Das Archiv der Beiträge vergangener Zeiten. |
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| Erfahrener Benutzer Registriert seit: 01.12.2003
Beiträge: 4.113
![]() | Diese Tutorial wurde von -->bigJay<-- geschrieben. ------------------------------------------------ In diesem Tutorial wird erklärt wie man ein Menü mit Unterpunkten darstellen kann. Als erstes werden die Hauptpunkte (HP) angezeigt, bei einem Klick auf einen HP werden die dazugehörigen Unterpunkte (UP) aufgeklappt, bei einem Klick auf einen UP werden seine Unterpunkte (UUP) aufgeklappt (also die Unter-Unterpunkte eines Hauptpunktes). Das ganze könnte theoretisch bis ins unendliche gehen. Die Datei nenne ich mal baum.php Als erstes widmen wir uns dem Array besser gesagt dem Zweideminsionalem Array. In diesem Array speichern wir die ganzen HPs und UPs…. Aber was ist ein Zweideminsionales Array? Das ist ein Array, welches andere Arrays in sich beinhaltet, wird auch als Multiarray genannt. Das Array wird folgendermaßen aufgebaut: Code: $felder = array ( 0 => array ( "id" => 1, "eintrag" => "HP1", "vater" => 0, "status" => 0 ), 1 => array ( "id" => 2, "eintrag" => "HP2", "vater" => 0, "status" => 0 ), 2 => array ( "id" => 3, "eintrag" => "UP1", "vater" => 1, "status" => 0 ), 3 => array ( "id" => 4, "eintrag" => "UUP1", "vater" => 3, "status" => 0 ), 4 => array ( "id" => 5, "eintrag" => "UP2", "vater" => 1, "status" => 0 ), 5 => array ( "id" => 6, "eintrag" => "UUP1", "vater" => 8, "status" => 0 ), 6 => array ( "id" => 7, "eintrag" => "UP1", "vater" => 2, "status" => 0 ), 7 => array ( "id" => 8, "eintrag" => "UP3", "vater" => 1, "status" => 0 ), 8 => array ( "id" => 9, "eintrag" => "UUP1", "vater" => 5, "status" => 0 ), 9 => array ( "id" => 10, "eintrag" => "HP3", "vater" => 0, "status" => 0 ), 10 => array ( "id" => 11, "eintrag" => "UUP2", "vater" => 5, "status" => 0 ) ); Ausführliche Infos zu Array : http://www.php.net/manual/de/function.array.php So, wie kann man es jetzt ausgeben lassen? Ich werde erklären, wie es mit einer Rekursiven Funktion (eine Funktion, die sich selber aufruft) funktioniert. Ausführliche Infos zu Funktionen: http://www.php.net/manual/de/functions.php Unsere Funktion wird struktur heißen. Warum Struktur? Keine Ahnung, mir ist nichts anderes eingefallen. Die Funktion bekommt einen Wert übergeben: $ID. Auf den Inhalt dieser Variablen komme ich später. Damit unsere Funktion mit dem Array $felder arbeiten kann, kann man es entweder wie $ID übergeben oder einfach global machen. Global bedeutet, dass $felder auch für die Funktion sichtbar ist obwohl es ihr nicht übergeben wurde. Das ganze sieht dann so aus: Code: function struktur($ID) {
global $felder;
}
Code: for ($x = 0; $x < count($felder); $x++){
}
Code: function struktur($ID) {
global $felder;
for ($x = 0; $x < count($felder); $x++){
if ($felder[$x]["vater"]==$ID) { // $x gleicht dem key des jeweiligen Arrays und vater //(logischerweise) der Bezugsid
echo "<ul>";
echo "[*]";
echo $felder[$x]["eintrag"];
struktur($felder[$x]["id"]); // die funktion wird rekursiv aufgerufen
echo "";
echo "[/list]";
}
}
}
Erklärung: Die Funktion wird aufgerufen und bekommt den wert 0 übergeben -> $ID = 0. In der for Schleife wird das Array durchgegangen. Beim ersten Durchlauf ist $x = 0. Das heißt: mit $felder[$x]["vater"] frage ich nach dem Vater im Array mit dem Key “0“. In der if Schleife wird verglichen, ob es in irgendeinem Array den Vater mit dem Wert von $ID gibt (und der war ja 0), somit wird das Array mit dem Key 0 ausgewählt. Dann werden die Öffnungs-Tags <ul> und <il> ausgegeben. Nach der Ausgabe von „eintrag“ wird die Funktion neu aufgerufen und die $ID bekommt den Wert $felder[$x]["id"], denn das ist ja so zusagen der Bezug für den nächsten anzuzeigenden „eintrag“. Wenn die Funktion keinen „eintrag“ zu $ID findet, wird die Funktion von welcher Sie aufgerufen wurde weiter verarbeitet -> dann werden nur noch die Tags[/list]und </il> zugemacht. Und so sieht das funktionierende Zwischenergebnis aus, welches uns schon mal das richtig ausgibt: Code: $felder = array (
0 => array ( "id" => 1, "eintrag" => "HP1", "vater" => 0, "href" =>"baum.php", "status" => 0 ),
1 => array ( "id" => 2, "eintrag" => "HP2", "vater" => 0, "href" =>"baum.php", "status" => 0 ),
2 => array ( "id" => 3, "eintrag" => "UP1", "vater" => 1, "href" =>"baum.php", "status" => 0 ),
3 => array ( "id" => 4, "eintrag" => "UUP1", "vater" => 3, "href" =>"baum.php", "status" => 0 ),
4 => array ( "id" => 5, "eintrag" => "UP2", "vater" => 1, "href" =>"baum.php", "status" => 0 ),
5 => array ( "id" => 6, "eintrag" => "UUP1", "vater" => 8, "href" =>"baum.php", "status" => 0 ),
6 => array ( "id" => 7, "eintrag" => "UP1", "vater" => 2, "href" =>"baum.php", "status" => 0 ),
7 => array ( "id" => 8, "eintrag" => "UP3", "vater" => 1, "href" =>"baum.php", "status" => 0 ),
8 => array ( "id" => 9, "eintrag" => "UUP1", "vater" => 5, "href" =>"baum.php", "status" => 0 ),
9 => array ( "id" => 10, "eintrag" => "HP3", "vater" => 0, "href" =>"baum.php", "status" => 0 ),
10 => array ( "id" => 11, "eintrag" => "UUP2", "vater" => 5, "href" =>"baum.php", "status" => 0 )
);
function struktur($ID) {
global $felder;
for ($x = 0; $x < count($felder); $x++){
if ($felder[$x]["vater"]==$ID) {
echo "<ul>";
echo "[*]";
echo $felder[$x]["eintrag"];
struktur($felder[$x]["id"]);
echo "";
echo "[/list]";
}
}
}
struktur(0);
Code: <?php
session_start();
session_register("felder");
?>
Ausführliche Infos zu session_start : http://www.php.net/manual/de/function.session-start.php Ausführliche Infos zu session_register : http://www.php.net/manual/de/functio...n-register.php Im Script mache ich folgendes: Code: if (!isset($_GET["x"])){ // das ist die Variable die in der URL übergeben wird
$felder = array (
0 => array ( "id" => 1, "eintrag" => "HP1", "vater" => 0, "href" =>"baum.php", "status" => 0 ),
1 => array ( "id" => 2, "eintrag" => "HP2", "vater" => 0, "href" =>"baum.php", "status" => 0 ),
2 => array ( "id" => 3, "eintrag" => "UP1", "vater" => 1, "href" =>"baum.php", "status" => 0 ),
3 => array ( "id" => 4, "eintrag" => "UUP1", "vater" => 3, "href" =>"baum.php", "status" => 0 ),
4 => array ( "id" => 5, "eintrag" => "UP2", "vater" => 1, "href" =>"baum.php", "status" => 0 ),
5 => array ( "id" => 6, "eintrag" => "UUP1", "vater" => 8, "href" =>"baum.php", "status" => 0 ),
6 => array ( "id" => 7, "eintrag" => "UP1", "vater" => 2, "href" =>"baum.php", "status" => 0 ),
7 => array ( "id" => 8, "eintrag" => "UP3", "vater" => 1, "href" =>"baum.php", "status" => 0 ),
8 => array ( "id" => 9, "eintrag" => "UUP1", "vater" => 5, "href" =>"baum.php", "status" => 0 ),
9 => array ( "id" => 10, "eintrag" => "HP3", "vater" => 0, "href" =>"baum.php", "status" => 0 ),
10 => array ( "id" => 11, "eintrag" => "UUP2", "vater" => 5, "href" =>"baum.php", "status" => 0 )
);
} else {
$felder = $_SESSION["felder"];
if ($felder[$_GET["x"]]["status"] == 0) {
$felder[$_GET["x"]]["status"] = 1;
} else {
$felder[$_GET["x"]]["status"] = 0;
}
}
Der eintrag der angezeigt wird, wird jetzt zum Link, welcher auf dasselbe Dokument verweist und die Variable $x übergibt: echo "".$felder[$x]["eintrag"].""; Dann muss man jetzt in der Funktion folgendes noch einfügen: Code: if ($felder[$x]["status"] == 1) {
struktur($felder[$x]["id"]);
}
So und das fertige Script sieht dann so aus: Code: <?php
session_start();
session_register("felder");
?>
<html>
<head>
<title>Klappmenü</title>
</head>
<body>
<?php
if (!isset($_GET["x"])){
$felder = array (
0 => array ( "id" => 1, "eintrag" => "HP1", "vater" => 0, "status" => 0 ),
1 => array ( "id" => 2, "eintrag" => "HP2", "vater" => 0, "status" => 0 ),
2 => array ( "id" => 3, "eintrag" => "UP1", "vater" => 1, "status" => 0 ),
3 => array ( "id" => 4, "eintrag" => "UUP1", "vater" => 3, "status" => 0 ),
4 => array ( "id" => 5, "eintrag" => "UP2", "vater" => 1, "status" => 0 ),
5 => array ( "id" => 6, "eintrag" => "UUP1", "vater" => 8, "status" => 0 ),
6 => array ( "id" => 7, "eintrag" => "UP1", "vater" => 2, "status" => 0 ),
7 => array ( "id" => 8, "eintrag" => "UP3", "vater" => 1, "status" => 0 ),
8 => array ( "id" => 9, "eintrag" => "UUP1", "vater" => 5, "status" => 0 ),
9 => array ( "id" => 10, "eintrag" => "HP3", "vater" => 0, "status" => 0 ),
10 => array ( "id" => 11, "eintrag" => "UUP2", "vater" => 5, "status" => 0 )
);
} else {
$felder = $_SESSION["felder"];
if ($felder[$_GET["x"]]["status"] == 0) {
$felder[$_GET["x"]]["status"] = 1;
} else {
$felder[$_GET["x"]]["status"] = 0;
}
}
function struktur($ID) {
global $felder;
for ($x = 0; $x < count($felder); $x++){
if ($felder[$x]["vater"]==$ID) {
echo "<ul>";
echo "[*]";
echo "".$felder[$x]["eintrag"]."";
if ($felder[$x]["status"] == 1) {
struktur($felder[$x]["id"]);
}
echo "";
echo "[/list]";
}
}
}
struktur(0);
?>
</body>
</html>
|
| |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | ||
| Erfahrener Benutzer Registriert seit: 01.12.2003
Beiträge: 4.113
![]() | das mag ja sein, was du so sagst.... aber ich würde mal sagen: Zitat:
| |
| |
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Navigation mit Unterpunkten | themonk | HTML, Usability und Barrierefreiheit | 3 | 13.12.2007 21:20 |
| Frage zu einem Tutorial: Menü mit Unterpunkten | PHP Tipps 2005 | 1 | 14.01.2005 15:49 | |

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.