rausis Posted April 10, 2009 Report Share Posted April 10, 2009 (edited) kods: function get_menu($id, $arr) { if(empty($arr[$id]) || !is_array($arr[$id])){ return ''; } $s = "\n<ul class='".($id > 0 ? 'sub' : 'main')."'>\n"; foreach($arr[$id] as $id => $val) { $s .= "<li><a href='?section=".$id."'>".$val."</a>".($id == $_GET['section'] ? get_menu($id, $arr) : '')."</li>\n"; } $s .= "</ul>\n"; return $s; } $arr = array(); $res = sql_query('SELECT id, parent_id, name FROM menu') or die(mysql_error()); while($row = mysql_fetch_object($res)) { $arr[$row->parent_id][$row->id] = $row->name; } echo get_menu(0, $arr); Kods sākumā izvada parent-linkus, uzspiežot uz kāda no tiem, zem tā parādās apakškategorijas, tik tālu viss ok, ja uzspiež uz apakškategorijas, tad atkal rāda tikai parent-linkus. Gribētos panākt tā, lai uzspiežot uz apakškategorijas, zem parent tās arī rādītos nevis pazustu. Cerams kāds kaut ko saprata :) Paldies! Edited April 10, 2009 by rausis Quote Link to comment Share on other sites More sharing options...
marcis Posted April 10, 2009 Report Share Posted April 10, 2009 Ja pareizi sapratu, tad ideja ir tāda - visu atvērto kategoriju id samet masīvā, tāvā gadījumā tev jāatrod visus $_GET['section'] parentus, un ciklā pārbaudi ar in_array(). Quote Link to comment Share on other sites More sharing options...
rausis Posted April 10, 2009 Author Report Share Posted April 10, 2009 Nu izdarīju tā kā teici, beigu beigās sanāca tas pats variants, kas sākumā, tāds kods: function get_menu($id, $arr) { if(empty($arr[$id]) || !is_array($arr[$id])){ return ''; } $parents = array(); $s = "\n<ul class='".($id > 0 ? 'sub' : 'main')."'>\n"; $i = 0; foreach($arr[$id] as $key => $val) { ($id < 1 ? $parents[$i] = $key : ''); $s .= "<li><a href='?section=".$key."'>".$val."</a>".(in_array($_GET['section'], $parents) ? get_menu($key, $arr) : '')."</li>\n"; $i++; } $s .= "</ul>\n"; echo '<pre>'; print_r($parents); echo '</pre>'; return $s; } Lab, mēģināšu vēlreiz... :D Viss koks: Tātad, ieeju lapā un menu izskatās šādi: Uzspiežu uz pirmā parent, man parādās uzspiestā parent'a apakšsadaļas: Tad spiežu uz kādas apakšsadaļas un menu man atkal pārvēršas par šo: Bet es vēlos, lai man viņš nav tāds kāds viņš ir tajā iepriekšējā bildē, bet vēlos lai viņš turpina rādīt apakšsadaļas: Nu tā.... Paldies! :) Quote Link to comment Share on other sites More sharing options...
marcis Posted April 10, 2009 Report Share Posted April 10, 2009 Tev tas parent'u masīvs nav pareizs. Tam vajadzētu izskatīties kaut kā šitā: <? $arr = $parr = array(); $res = sql_query('SELECT id, parent_id, name FROM menu') or die(mysql_error()); while($row = mysql_fetch_object($res)) { $arr[$row->parent_id][$row->id] = $row->name; $parr[$row->id] = $row->parent_id; } $parents = array(); function get_parents(&$out,$in,$id){ if(!array_key_exists($id,$in)){ return false; } $out[] = $in[$id]; get_parents($out,$in,$in[$id]); } get_parents($parents,$arr,$_GET['section']); echo get_menu(0, $arr); ?> Un attiecīgi padosi get_menu() arī gatavo parent'u masīvu un nočekosi vai konkrētais id ir iekš dotā masīva Quote Link to comment Share on other sites More sharing options...
rausis Posted April 11, 2009 Author Report Share Posted April 11, 2009 (edited) kkā cīnījos ar tavu kodu, beigās nekas vairāk, kā sākumā man nesanāca.... sataisīju kkā līdzīgi, tagad strādā kā nākas, paldies tev ;) šeit tas, ko izveidoju: http://paste.php.lv/0c334d356028ae2770cf05...707ca0?lang=php Edited April 11, 2009 by rausis Quote Link to comment Share on other sites More sharing options...
marcis Posted April 11, 2009 Report Share Posted April 11, 2009 Ja tev koks neies tālāk par 2 līmeņiem, tad tavs variants arī der. Quote Link to comment Share on other sites More sharing options...
n0one Posted April 22, 2009 Report Share Posted April 22, 2009 Ko darīt ar trīs Līmeņiem ... Esmu tieši tādā pašā problēmā. Man ieteica sākt rekursīvi no pašas lejas. TI no 3 līmeņa un līdz pirmo ... Nu domu es saprotu, taču nespēju uzbūvēt rekursīvu funkciju ... Aptuvens selekts: Selektēju m2.* NO menu m1, menu m2 Kur url_name='aktuali' AND m1.v_id=m2.v_id; - dabūšu vienu līmeni bet kā tālāk??? links ir šāds - www.mlapa.lv/menu_1lvl/menu_2lvl/menu_3lvl menu_1lvl = url_name Quote Link to comment Share on other sites More sharing options...
marcis Posted April 22, 2009 Report Share Posted April 22, 2009 Lūk raksts par citu tēmu, taču ideja tā pati. Un kā atvērt koku pēc konkrētā id, palasi dažus postus augstāk :) Quote Link to comment Share on other sites More sharing options...
n0one Posted April 22, 2009 Report Share Posted April 22, 2009 Paldies :) Provēšu šo te. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.