Rekurzív menü PHP-ben, SQL-ből?
Nem vagyok nagy PHP guru, csak tanulom, de már 3 vagy 4 napja küzdök ezzel a problémával, és mindig akad valami probléma.
Adott egy SQL tábla, ezek a mezők:
id | group_id | main_group_id | parent_id | lang_id | name
egy kis magyarázat:
id(egyértelmű),
group_id(a csoport id-ja, több azonos is lehet, mert többnyelvű),
main_group_id(a főcsoport ID-ja, ezzel most nem kell különösebben foglalkozni)
lang_id(a nyelv ID-ja)
name(a bejegyzés neve)
A lényeg, szeretnék a fenti a adattáblából valahogy egy UL listát készíteni, ami még nem lenne nagy gond. A gond ott kezdődik, hogy fontos lenne az alkategóriákat egy újabb UL címkébe tenni, de a függvényem olyan csodákat képes létrehozni, amire mindent lehet mondani, csak azt nem hogy tökéletesen működik.
Eddig ennyire jutottam, ez a kód, ebben a formában rossz, és már nem tudom, hogyan módosítsam, vagy hogyan dolgozzam fel a csoportokat:
function a($deep,$parent,$lang,$main_group) {
$html = "";
$query = mysql_query("SELECT * FROM groups WHERE parent_id=$parent AND lang_id=$lang AND main_group_id=$main_group ORDER BY seq ASC, group_id ASC");
if(mysql_num_rows($query) > 0) {
while($r = mysql_fetch_array($query)) {
$id = $r['group_id'];
$name = $r['name'];
$parent_id = $r['parent_id'];
$toggle_qry = mysql_query("SELECT parent_id, lang_id FROM groups WHERE parent_id=$id AND lang_id=$lang");
$numrecord = mysql_num_rows($toggle_qry);
if($numrecord > 0) {
$hit = true;
$sublist .= "\r\n<ul class="almenu">\r\n".a($deep+1,$id,$lang,$main_group)."</ul>\r\n";
$ico = "<img src="images/plus.png" width="10" height="10" class="trigger" style="float: left;" alt="">";
}
$html .= "<li style="padding-left:{$padding}px;"><a href="">{$name}</a>{$ico}{$sublist}</li>\r\n";
if(!isset($hit)) {
$html .= a($deep+1,$id,$lang,$main_group);
}
}
}
return $html;
}
ehhez is egy kis dokumentáció:
$deep (a mélységet jelzi, minél beljebb megyünk a listában, hozzáad egyet)
$parent (a szülő ID-t jelzi, alapból 0)
$lang (nyelv ID)
$main_group (főkategória ID-ja)
Nem tudom, ki vetemedik arra, hogy egyáltalán elolvassa ezt a hosszú kérdést :) azt meg pláne nem tudom, hogy valaki meglátja-e a megoldást, de minden segítséget szívesen fogadok, ugyanis már teljesen elakadtam...
Nagy vonalakban.
Egyszerre kérdezed le az összes adatot a táblából a lang_id-ra szűrve. Felépítesz az adatokból egy fát és azt adod át a függvénynek.
function Generate($faelem,$depth)
{
$generated_html = '';
if($depth > 0)
{
//saját elem létrehozása -> li tag
}
if($faelem->gyerekelemek_szama > 0)
{
foreach($faelem->gyerekek as $aktualis_gyerek)
{
$generated_html .= Generate($aktualis_gyerek, $depth + 1);
}
}
return $generated_html;
}
Nem php-zek igazán, de strukturálisan így képzelem el :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!