Autor |
Nachricht |
LioGetz
Threadersteller
Dabei seit: 24.03.2003
Ort: Aachen
Alter: 44
Geschlecht:
|
Verfasst Do 16.08.2007 17:10
Titel [PHP/MySQL] Menü aus DB mit Untermenü |
|
|
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
Zuletzt bearbeitet von LioGetz am Do 16.08.2007 17:12, insgesamt 1-mal bearbeitet
|
|
|
|
|
m
Moderator
Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht:
|
|
|
|
|
Anzeige
|
|
|
LioGetz
Threadersteller
Dabei seit: 24.03.2003
Ort: Aachen
Alter: 44
Geschlecht:
|
Verfasst Do 16.08.2007 18:47
Titel
|
|
|
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 ?!
Auf jeden Fall kommt bei mir kein Menü...
Thx im voraus
CU
Lio
|
|
|
|
|
pRiMUS
Dabei seit: 09.09.2003
Ort: Vienna
Alter: 48
Geschlecht:
|
Verfasst Do 16.08.2007 19:21
Titel
|
|
|
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.
|
|
|
|
|
LioGetz
Threadersteller
Dabei seit: 24.03.2003
Ort: Aachen
Alter: 44
Geschlecht:
|
Verfasst Do 16.08.2007 19:34
Titel
|
|
|
jo, danke ...ich hab genau 2 besucher...mich selber und der assistent der meinen shop morgen abnehmen soll .
Problem ist nur, das ich garkein Menü sehe...und ich habs genauso gemacht wie im Bsp...(siehe Code oben).
Ne Idee ??
// edit:
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
Zuletzt bearbeitet von LioGetz am Do 16.08.2007 20:46, insgesamt 2-mal bearbeitet
|
|
|
|
|
|
|
|
Ä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?
|
|