Mein anliegen ist das ich ein Menü Programmieren will das soviele Untermenüs wie möglich in eine Datenbank speichern kann und diese wieder in einer art baumstrucktur ausgibt. das Speichern ist kein problem da habe ich folgende MYSQL Strucktur benutzt.
_______________________________
CREATE TABLE `kategorie` (
`ID_KATEGORIE` int(11) NOT NULL auto_increment,
`NAME_KATEGORIE` varchar(60) NOT NULL default '',
`PARENT_ID` int(11) NOT NULL default '0',
`SORT_ORDER` int(3) NOT NULL default '0',
`DATE_ADDED` datetime NOT NULL default '0000-00-00 00:00:00',
`DATEMODIFIED` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`ID_KATEGORIE`),
KEY `PARENT_ID` (`PARENT_ID`)
) TYPE=MyISAM AUTO_INCREMENT=9 ;
___________________________________________________
Ich habe jetzt bloß Probleme bei der Ausgabe ich dachte eine rekursion wird da weiterhelfen. Also habe ich mit arrays und funktionen um mich geschmissen und diese mal ausprobiert.
Problem ist jetzt das ich die erste und die zweite ebene erhalte. Bloß geht es nicht weiter.
Ich muss eine Funktion schreiben der alle menues zurückverfolgend aus gibt wie folgt:
Menue1
Untermenue1
SubUntermenue1
Subuntermenue2
Untermenue2
Menue2
und so weiter.
dazu habe ich dieses Script geschrieben das leider nicht funktioniert würde mich unheimlich freuen wenn Ihr mir helfen könntet:
_________________________________________________
function sub_categories ($Kategorie, $account)
{
$query_sub_menu = "SELECT * FROM `kategorie` WHERE `PARENT_ID` = '".$Kategorie."'";
$result_sub_menu = @mysql_query($query_sub_menu);
$num_sub_menu = @mysql_num_rows($result_sub_menu);
if ($num_sub_menu >= 1)
{
for ($j=0; $j < $num_sub_menu; $j++)
{
$row_sub_menu = @mysql_fetch_object($result_sub_menu);
$id_name = array();
$account = array_merge($account, array($row_sub_menu->NAME_KATEGORIE => $row_sub_menu->ID_KATEGORIE ));
}
return $account;
}
}
function sub_categories_link($ID, $PARENT_ID)
{
if (($_REQUEST['untermenue'] == "true") && ($_REQUEST['ID_KATEGORIE'] == $ID))
{
$z = sub_categories($_REQUEST['ID_KATEGORIE'],array());
while(!empty($z))
{
$menu_name = array_keys ($z);
while(!empty($menu_name))
{
echo " <a href=menue.php?untermenue=true&liste=true&ID_KATEGORIE=".array_shift($z).">".array_shift($menu_name) ."</a><br> ";
}
}
}
if (($_REQUEST['untermenue'] == "true") && ($_REQUEST['ID_KATEGORIE'] == $PARENT_ID))
{
$z = sub_categories($_REQUEST['$PARENT_ID'],array());
while(!empty($z))
{
$menu_name = array_keys ($z);
while(!empty($menu_name))
{
echo " <a href=menue.php?untermenue=true&liste=true&ID_KATEGORIE=".array_shift($z).">".array_shift($menu_name) ."</a><br> ";
}
}
}
}
//Die verbindungsdatei
include("connection.tmp");
$query = "SELECT * FROM `kategorie` WHERE `PARENT_ID` = '0'";
$result = @mysql_query($query);
$num = @mysql_num_rows($result);
if ($num < 1) { echo ("Kein Menü");} else
{
for($i = 0; $i < $num; $i++)
{
$row = @mysql_fetch_object($result);
//ausgabe Hauptkatagorie
echo "<a href=menue.php?untermenue=true&ID_KATEGORIE=".$row->ID_KATEGORIE.">".$row->NAME_KATEGORIE."</a>";
echo "<br>";
sub_categories_link($row->ID_KATEGORIE, $row->PARENT_ID);
//echo "<br>";
}
}
_______________________________
CREATE TABLE `kategorie` (
`ID_KATEGORIE` int(11) NOT NULL auto_increment,
`NAME_KATEGORIE` varchar(60) NOT NULL default '',
`PARENT_ID` int(11) NOT NULL default '0',
`SORT_ORDER` int(3) NOT NULL default '0',
`DATE_ADDED` datetime NOT NULL default '0000-00-00 00:00:00',
`DATEMODIFIED` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`ID_KATEGORIE`),
KEY `PARENT_ID` (`PARENT_ID`)
) TYPE=MyISAM AUTO_INCREMENT=9 ;
___________________________________________________
Ich habe jetzt bloß Probleme bei der Ausgabe ich dachte eine rekursion wird da weiterhelfen. Also habe ich mit arrays und funktionen um mich geschmissen und diese mal ausprobiert.
Problem ist jetzt das ich die erste und die zweite ebene erhalte. Bloß geht es nicht weiter.
Ich muss eine Funktion schreiben der alle menues zurückverfolgend aus gibt wie folgt:
Menue1
Untermenue1
SubUntermenue1
Subuntermenue2
Untermenue2
Menue2
und so weiter.
dazu habe ich dieses Script geschrieben das leider nicht funktioniert würde mich unheimlich freuen wenn Ihr mir helfen könntet:
_________________________________________________
function sub_categories ($Kategorie, $account)
{
$query_sub_menu = "SELECT * FROM `kategorie` WHERE `PARENT_ID` = '".$Kategorie."'";
$result_sub_menu = @mysql_query($query_sub_menu);
$num_sub_menu = @mysql_num_rows($result_sub_menu);
if ($num_sub_menu >= 1)
{
for ($j=0; $j < $num_sub_menu; $j++)
{
$row_sub_menu = @mysql_fetch_object($result_sub_menu);
$id_name = array();
$account = array_merge($account, array($row_sub_menu->NAME_KATEGORIE => $row_sub_menu->ID_KATEGORIE ));
}
return $account;
}
}
function sub_categories_link($ID, $PARENT_ID)
{
if (($_REQUEST['untermenue'] == "true") && ($_REQUEST['ID_KATEGORIE'] == $ID))
{
$z = sub_categories($_REQUEST['ID_KATEGORIE'],array());
while(!empty($z))
{
$menu_name = array_keys ($z);
while(!empty($menu_name))
{
echo " <a href=menue.php?untermenue=true&liste=true&ID_KATEGORIE=".array_shift($z).">".array_shift($menu_name) ."</a><br> ";
}
}
}
if (($_REQUEST['untermenue'] == "true") && ($_REQUEST['ID_KATEGORIE'] == $PARENT_ID))
{
$z = sub_categories($_REQUEST['$PARENT_ID'],array());
while(!empty($z))
{
$menu_name = array_keys ($z);
while(!empty($menu_name))
{
echo " <a href=menue.php?untermenue=true&liste=true&ID_KATEGORIE=".array_shift($z).">".array_shift($menu_name) ."</a><br> ";
}
}
}
}
//Die verbindungsdatei
include("connection.tmp");
$query = "SELECT * FROM `kategorie` WHERE `PARENT_ID` = '0'";
$result = @mysql_query($query);
$num = @mysql_num_rows($result);
if ($num < 1) { echo ("Kein Menü");} else
{
for($i = 0; $i < $num; $i++)
{
$row = @mysql_fetch_object($result);
//ausgabe Hauptkatagorie
echo "<a href=menue.php?untermenue=true&ID_KATEGORIE=".$row->ID_KATEGORIE.">".$row->NAME_KATEGORIE."</a>";
echo "<br>";
sub_categories_link($row->ID_KATEGORIE, $row->PARENT_ID);
//echo "<br>";
}
}
Kommentar