Einzelnen Beitrag anzeigen
  #1  
Alt 20.03.2010, 22:47:59
knight1 knight1 ist offline
Junior Member
 
Registriert seit: May 2003
Ort: Trier
Alter: 47
Beiträge: 310
knight1 eine Nachricht über MSN schicken knight1 eine Nachricht über Skype™ schicken
Dynamisches erstellen eines Navigationsmenüs

Hi SELFPHP-Com,
ich habe momentan ein Problem mit dem dynamischen erstellen eines Navigationsmenüs.
Die Tabellen-Struktur sieht folgendermaßen aus:
Code:
id bigint(20) UNSIGNED auto_increment               
name varchar(255)
site varchar(255)
parent_id bigint(20) UNSIGNED
year_disposal enum('0','1')
order int(11)
active enum('0','1')
Der Inhalt der Tabelle sieht folgendermaßen aus:
Code:
id|name|site|parent_id|year_disposal|order|active
1|Home|home|0|0|1|1
2|Über mich|about_me|0|0|2|1
3|Projekte/Referenzen|projects|0|0|3|1
4|Kontakt|contact|0|0|4|1
5|Impressum|imprint|0|0|5|1
6|Nützliches/Dies und Das|usefull|0|0|6|1
7|Smilies|smilies|6|0|1|1
8|Feiertage und Ereignisse|holidays|6|1|2|1
Ich habe mir eine rekursive Funktion geschrieben welche mir die Darstellung des Menüs übernehmen soll.
Hier mal den Code der Funktion:
PHP-Code:
function navigation ($parent_id,$level,$mysqli)
{
$return = array();
$query $mysqli->query("
SELECT
*,
`id` AS `sub_id`,
(SELECT COUNT(*) FROM `"
.MYSQL_TABLE_PAGES."` WHERE (`parent_id` = `sub_id`)) AS `count`
FROM
`"
.MYSQL_TABLE_PAGES."`
WHERE
(
    (
        (`parent_id` = '0') ||
        (`parent_id` = '{$parent_id}')
    ) &&
    (`active` = '1')
)
ORDER BY
`order` ASC
"
);
$rows $query->num_rows;
 while (
$result $query->fetch_array(MYSQL_ASSOC))
 {
 
$hyphens "";
  for (
$x=1;$x<=$level;$x++) { $hyphens .= "-"; }
 
$year "";
  if (
$result['count'] == 0)
  {
   if (
$result['year_disposal'] == 1) { $year "&amp;year=".CURRENT_YEAR; }
  
$return[] = "{$hyphens} <a href=\"content.php?site={$result['site']}{$year}\" target=\"content_frame\">{$result['name']}</a><br>";
  }
  if (
$result['count'] >= 1)
  {
  
$return[] = "{$hyphens} <a href=\"navigation.php?cat={$result['id']}\" target=\"_self\">{$result['name']}</a><br>";
  }
  if (
$parent_id == $result['id'])
  {
  
$return[] = navigation($result['id'],$level+1,$mysqli);
  }
 }
RETURN 
implode($return);

Der initiative Aufruf der Funktion erfolgt folgendermaßen
PHP-Code:
echo navigation($_GET['cat'],1,$mysqli); 
an der Stelle wo das Menü hinkommen soll.
Wenn ich keinen der Unterpunkte anzeigen lasse, dann wird das Menü korrekt dargestellt und es werden keine Fehler ausgegeben.
Wenn ich mir aber die Unterpunkte des Menpunkts "Nützliches/Dies und Das" (Ist momentan der einzige mit Unterpunkten) anzeigen lassen möchte kommt die Fehlermeldung
Code:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 523800 bytes) in Pfad zur Datei/navigation.php on line 45
Die Zeile 45 ist folgende:
PHP-Code:
$return[] = navigation($result['id'],$level+1,$mysqli); 
Ich kann mir nicht erklären worauf sich der Fehler beziehen soll. Ich habe schon den Parent-ID-Parameter als Zahl manuell definiert und auch die $mysqli-Methode per GLOBAL in die Funktion importiert. Es kommt aber jedesmal erneut der Fehler.

Vielleicht sehe ich ja vor lauter Bäumen den Wald nicht mehr.


Für Tipps wäre ich dankbar.


Kai aka Knight1
Mit Zitat antworten