mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Do 25.04.2024 21:20 Benutzername: Passwort: Auto-Login

Thema: [PHP/MySQL] Menü aus DB mit Untermenü vom 16.08.2007


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [PHP/MySQL] Menü aus DB mit Untermenü
Autor Nachricht
LioGetz
Threadersteller

Dabei seit: 24.03.2003
Ort: Aachen
Alter: 44
Geschlecht: Männlich
Verfasst Do 16.08.2007 17:10
Titel

[PHP/MySQL] Menü aus DB mit Untermenü

Antworten mit Zitat Zum Seitenanfang

Hi @ all,
mal wieder ne Frage für meinen Uni-Webshop den ich machen muss.
Ich hab nen Shop mit mehreren Kategorien. Die sind in ner DB gespeichert und wurden (bis jetzt) ganz normal ausgelesen und als Menü dargestellt. Jetzt soll es aber so sein, das die einzelnen Kategorien auch noch Unterkategorien haben sollen. OK, bis dahin klappt, das anlegen mit zuordnung zu ner Oberkategorie hab ich auch noch hinbekommen, aber jetzt steh ich vor nem Problem die Kategorien mit den jeweiligen Unterkategorien darzustellen.
Mit meiner vorherigen Vorgehensweise schmeißt er mir nur alle Kategorien die in der DB drin sind untereinander aus. Ich habe die Zuordnung mit ner Parent-Spalte verwirklicht, d.h. wenn das eine Sub-Kategorie ist steht in der Parent-Spalte die ID von der Haupt-Kategorie, sonst Null.
(Die Table "Rubrik" besteht im Moment nur aus rubrik_ID, name und parent.)
Wie schaffe ich das so auszulesen dass das nun vernünftig struktiert erscheint, also etwa so:
(ich hab das jetzt mal mit Strichen gemacht, die leerzeiche wurden irgendwie gekickt vom forum)

- Autos
---- Sportwagen
---- Geländewagen
- Bücher
---- Horror
---- Romane
------- Bestseller
- Zuberhör

"Irgendwie" muss das mit ner for-Schleife gehen (glaube ich), aber da fehlt mir irgendwie das fundierte DB-Array wissen. Hat jemand ne Ahnung.
Mein bisheriger Code:

Code:

<?php
dbstart();
$query = "SELECT * FROM rubrik";   // Befehl an Datenbank 
$result = mysql_query($query); // Befehl an DB senden
$data = mysql_fetch_array($result);

echo "<ul>";
while($data = mysql_fetch_array($result)) {

echo "<li><a href='show.php?rubrik_ID=".$data['rubrik_ID']."'>".$data['name']."</a></li>\n";

}
echo "</ul>";
mysql_close();
?>



...und der Ansatz mit der for-schleife:
Code:

<?php
dbstart();
$query = "SELECT * FROM rubrik";   // Befehl an Datenbank 
$result = mysql_query($query); // Befehl an DB senden
$num = mysql_num_rows($result);
$data = mysql_fetch_array($result);

   for ($i=0; $i<$num; $i++) {
      if ($data['parent'] != 0) {
      
      echo $data['name'];
      echo "test";
      }
   

   }

mysql_close();
?>


Wie gesagt, das klappt noch nicht so ganz, weil er ja erstmal alles einlesen muss und dann irgendwie sortieren. Wäre über Hilfe dankbar.

Vielen Dank im voraus
CU
Lio Grins


Zuletzt bearbeitet von LioGetz am Do 16.08.2007 17:12, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
m
Moderator

Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Do 16.08.2007 17:48
Titel

Antworten mit Zitat Zum Seitenanfang

http://phpperformance.de/hierarchische-strukturen-und-baeume-in-mysql-rekursion/

http://phpperformance.de/nested-sets-hierarchische-strukturen-und-baeume-in-mysql/


Zuletzt bearbeitet von m am Do 16.08.2007 18:03, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
LioGetz
Threadersteller

Dabei seit: 24.03.2003
Ort: Aachen
Alter: 44
Geschlecht: Männlich
Verfasst Do 16.08.2007 18:47
Titel

Antworten mit Zitat Zum Seitenanfang

ohh cool....danke, der "rekursiv-link" ist genau das was ich brauche...
ich habs mal soweit eingebaut, nur irgendwie sehe ich nix und ich suche den fehler. irgend ne idee
(die DB aus dem Bsp. und meine ist ja bis auf die Benennung fast gleich).

Code:

dbstart();
function getMenu($oberkat) {
   $einlesen = mysql_query("SELECT rubrik_ID,name FROM rubrik WHERE parent='".$oberkat."' ORDER BY name");
   $menu = "";

   while($einzeln = @mysql_fetch_assoc($einlesen)) {
      if(hasChildKats($einzeln['rubrik_ID'])) {
         $menu .= "<li>".$einzeln['name']."<ul>";
         $menu .= getMenu($einzeln['rubrik_ID']);
         $menu .= "</ul></li>";
         
      } else {
         $menu .= "<li>".$einzeln['name']."</li>";
      }
   }
return $menu;
}

function hasChildKats($katID) {
   $einlesen = mysql_query("SELECT rubrik_ID FROM rubrik WHERE parent='".$katID."'");
      if(mysql_num_rows($einlesen)>0) return true; else return false;
}
$test = 0;
getMenu($test);


Ist das dann richtig das ich die Funktion getMenu mit ner Variable (hier in dem Fall 0) aufrufe, weil ich ja alle Ebenen haben will. Und hasChildKats ruf ich manuell ja garnicht auf, oder? Die wird ja in der Funktion getMenu benutzt (und bekommt da auch den nötigen Parameter)...oder seh ich das falsch * Keine Ahnung... * ?!

Auf jeden Fall kommt bei mir kein Menü...

Thx im voraus
CU
Lio Grins
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
pRiMUS

Dabei seit: 09.09.2003
Ort: Vienna
Alter: 48
Geschlecht: Männlich
Verfasst Do 16.08.2007 19:21
Titel

Antworten mit Zitat Zum Seitenanfang

schöner ist natürlich die nested sets variante, aber die andere geht auch. die problematik ist halt das du mehrere statements absetzen musst um deine navigation auszulesen. aber bei ein paar navigations punkten und einen nicht zu erwartenden besucher ansturm der in die mio / sekunde geht, sollte das keine bemerkbare performance einbrüche geben.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
LioGetz
Threadersteller

Dabei seit: 24.03.2003
Ort: Aachen
Alter: 44
Geschlecht: Männlich
Verfasst Do 16.08.2007 19:34
Titel

Antworten mit Zitat Zum Seitenanfang

jo, danke Grins...ich hab genau 2 besucher...mich selber und der assistent der meinen shop morgen abnehmen soll *zwinker*.
Problem ist nur, das ich garkein Menü sehe...und ich habs genauso gemacht wie im Bsp...(siehe Code oben).
Ne Idee ?? * Keine Ahnung... *


// edit: * Ich geb auf... * * Applaus, Applaus * * huduwudu! *
Ich habs...manchmal sollte man erstmal ne Pause machen...für alle die das Problem auch haben:
Der return wert geht so natürlich ins Nichts, also sollte man die Funktion in ne Variable aufrufen und die dann ausgeben...

CU
Lio Grins


Zuletzt bearbeitet von LioGetz am Do 16.08.2007 20:46, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen Menü superfish klappt beim hoovern kein Untermenü auf
Menü (PHP&MySQL) - Adjacency List Model
[PHP/MySQL] Dynamisches Menü mit Nested Sets
Untermenü in DW CS3
Untermenü in Dreamweaver CS3
[HTML/CSS]Untermenü auf linker Seite?
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.