Kezdőoldal » Számítástechnika » Programozás » Rekurzív menü PHP-ben, SQL-ből?

Rekurzív menü PHP-ben, SQL-ből?

Figyelt kérdés

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...


2013. jan. 31. 12:44
 1/1 Pj0tr ***** válasza:

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 :)

2013. jan. 31. 13:53
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!