php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 31.03.2006, 14:00  
Gast
 
Beiträge: n/a
Standard Baumstruktur anzeigen

Hallo,

ich bin am verzweifeln !

Und zwar möchte ich eine Baumstruktur eines Menus anzeigen.

In etwa so:
Zitat:
- Root
|
|-Oberpunkt 1
| |
| |- Unterpunkt 1.1
| | |
| | |- Unterpunkt 1.1.1
| |
| |- Unterpunkt 1.2
|
|- Oberpunkt 2
|
Es soll alles aus der Datenbank gelesen werden.
Die Datenbank schaut wie folgt aus:

Zitat:

id | pid | MenuName |
---------------------------------
1 | 0 | Oberpunkt 1
---------------------------------
2 | 0 | Oberpunkt 2
---------------------------------
3 | 1 | Unterpunkt 1.1
---------------------------------
4 | 3 | Unterpunkt 1.1.1
---------------------------------
5 | 1 | Unterpunkt 1.2
---------------------------------
Also wie gesagt will ich das ganze Menu anzeigen lassen. Wie eine Sitemap oder so.

Ich komme jetzt nur so weit das ich folgendes Anzeigen kann:

Zitat:
- Root
|
|-Oberpunkt 1
| |
| |- Unterpunkt 1.1
| | |
| | |- Unterpunkt 1.1.1
| |
Und zwar mit foldendem Code:
Code:
<?PHP

function showmenu($pid=0) {
global $db, $_GET;
$dbg = $db->Select();
$row = $db->SelectPuffer;
if($db->Rows) {
  for($i=0; $i<$db->Rows; $i++) {
   $newID = $row[$i][uid];
   echo $row[$i][MenuName]."
";
   $next = content::showmenu($newID);
}
}
?>
Ich weiß das das irgendwie Rekursiv zu machen ist. Mir fehlt noch der entscheidene Hinweis was ich noch übergeben muß.
Wie lese ich jetzt das komplette Menu aus? Kann mir da jemand helfen. Hab eine Hirnblockade.

Vielen Dank im Vorraus.
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 31.03.2006, 14:05  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.234
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Niemand weiss, was $db soll bzw. ist, niemand weiss, was in $dbg steht und niemand weiss, was in $row steht. Vielleicht löst sich die Hirnbolckade durch ein paar var_dumps, wenn nicht hilft die vielleicht uns.

Und btw. eine bessere Antwort kriegt man im Fortgeschrittenen-Forum nicht, ausser: Irgendwie sieht deine Datenbank-Schnittstelle leicht merkwürdig aus.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline   Mit Zitat antworten
Alt 31.03.2006, 14:17  
Gast
 
Beiträge: n/a
Standard

Also $db ist die Datenbank Abfrage eine Klasse die Abfragen macht.
$row ist das Ergebnis der Abfrage und $dbg ist nur für das Debugging da.
  Mit Zitat antworten
Alt 31.03.2006, 14:18  
Gast
 
Beiträge: n/a
Standard

Die Datenbanktabelle stellt nur einen Ausschnitt dar.

Mir gehts nicht darum ob ich die Abfrage falsch mache sondern wie ich die Rekursion so hinbekomme das ich alle Punkte im Menu anzeige.
  Mit Zitat antworten
Alt 31.03.2006, 14:24  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.234
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Vielleicht sollte man hierfür wissen, was in den Variablen drinsteht, um dir diesbezüglich Tips zu geben. Auf den ersten Blick ruft die Methode sich selber auf (das wäre die Rekursion), aber die übergebene ID ($pid) wird nie verwendet... Etwas merkwürdig...
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline   Mit Zitat antworten
Alt 31.03.2006, 14:32  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hi, du fragst die datenbank rekursiv ab, und das ist nicht nur unschön, mit steigender anzahl der menüpunkte kannst du damit die komplette anwendung zum erliegen bringen u.O. den datenbank-server zum absturz bringen. du brauchst nämlich mindestens genau so viele datenbankabfragen wie du menüpunkte hast. bei 50 menüpunkten sind das schon 50 queries.

"global $_GET" ist übrigens unsinn, $_GET ist eh überall verfügbar. kannst dir die alte angewohnheit von $HTTP_GET_VARS gleich abgewöhnen.

es gibt für baumstrukturen in datenbanken z.b. das "nested sets" modell (google fragen, nicht mich), aber das ist nichts für anfänger oder fortgeschrittene. weitaus günstiger und einfacher wäre es (für dich), wenn du das menü mit ID und inhalt in einem xml-dokument speicherst. dann sind zwar die daten an zwei stellen, aber es ist bei weitem einfacher handzuhaben.

//my 2 c
axo
axo ist offline   Mit Zitat antworten
Alt 31.03.2006, 14:34  
Gast
 
Beiträge: n/a
Standard

PHP-Code:
<?php

function showmenu($pid=0) { 
 
$query mysql_query("SELECT id, pid, MenuName FROM menu WHERE pid = ".$pid.""DB); 
$row mysql_fetch_array($query);
$num mysql_num_rows($query);
if(
$num) { 
  for(
$i=0$i<$num$i++) { 
   
$newID $row[$i][id]; 
   echo 
$row[$i][MenuName]."
"

   
$next content::showmenu($newID); 




?>
Vielleicht ist es so verständlicher?
  Mit Zitat antworten
Alt 31.03.2006, 14:39  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von axo
"global $_GET" ist übrigens unsinn, $_GET ist eh überall verfügbar. kannst dir die alte angewohnheit von $HTTP_GET_VARS gleich abgewöhnen.
Und wenn die function eine Methode ist dann auch? Ist dann Get auch überall verfügbar?

Ich habe REGISTER_GLOBALS = off?
  Mit Zitat antworten
Alt 31.03.2006, 15:46  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.234
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

$_GET ist überall verfügbar. immer, auch bei Methoden.

Das obige sieht schon richtiger aus ($pid wird verwendet), auch wenn ich axo zustimmen würde, dass man das anders lösen sollte. Siehe google.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline   Mit Zitat antworten
Alt 31.03.2006, 16:35  
Gast
 
Beiträge: n/a
Standard

OK. Verstanden.
Frage mich nur warum Typo3 dann nicht nach dem Nested Set arbeitet?
Oder meint ihr das gerade deswegen Typo3 in der Performance langsam ist?

Würde mich mal interessieren.

Gruß
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
RTF mit PHP auslesen und anzeigen möglich ? RaBastel PHP Tipps 2008 8 10.03.2008 10:03
Mehrere div's mit gleichen ID anzeigen / ausblenden phpbeginner HTML, Usability und Barrierefreiheit 9 06.09.2007 02:48
Baumstruktur die man drehen kann aktionkuba Datenbanken 1 07.04.2006 16:44
Anzeigen wenn keine Einträge in Datenbank! c-bass PHP Tipps 2006 6 22.03.2006 13:49
PHP Seiten auf der Festplatte anzeigen lassen? PHP Tipps 2006 7 25.01.2006 19:53
Bilder anzeigen und nicht anzeigen Cyrus PHP Tipps 2005-2 7 26.10.2005 20:23
Daten aus Datenbank auslesen und in PHP-Seite anzeigen PHP Tipps 2005-2 1 28.08.2005 20:16
PHP Code lässt sich nicht anzeigen! Asipak PHP Tipps 2005-2 7 19.07.2005 19:16
Schleifendurchlauf anzeigen Lia PHP Tipps 2005 9 03.06.2005 10:43
Datenbankabfrage: Ergebnisse anzeigen PHP Tipps 2005 5 07.04.2005 10:31
Formular nach UPDATE anzeigen PHP Tipps 2004-2 5 22.12.2004 02:06
[Erledigt] Cookie - Seite anzeigen / nicht anzeigen PHP Tipps 2004-2 2 11.11.2004 15:59
ANzeigen von Dateien oder Inhalten flual2000 PHP Tipps 2004-2 1 08.11.2004 12:31
Alle Datenbanken und Tabellen anzeigen anzeigen imported_Lumio PHP Tipps 2004 4 13.09.2004 14:26
Xampp, eigene Dateien anzeigen... Server, Hosting und Workstations 4 19.06.2004 23:36

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php baumstruktur darstellen, php menü baumstruktur, baumstruktur anzeigen, baumstruktur php, php baumstruktur anzeigen, html baumstruktur darstellen, http://www.php.de/php-fortgeschrittene/38693-erledigt-baumstruktur-anzeigen.html, php baum anzeigen, java baumstruktur, html baumstruktur anzeigen, db als baum anzeigen, baumstruktur sitemap, sitemap baumstruktur, datenbank baumstruktur, php baumstruktur darstellen aus datenbank, php menue baumstruktur, baumstruktur html-db, show_menu unterpunkte, php website menu baum struktur, php baumstruktur

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:12 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.