Jump to content
php.lv forumi

menu, rekursija...


rausis

Recommended Posts

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 by rausis
Link to comment
Share on other sites

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:

01gedntlczppcrlqb0ks.png

 

Tātad, ieeju lapā un menu izskatās šādi:

wsbrdywyhxq0424eq16h.png

 

Uzspiežu uz pirmā parent, man parādās uzspiestā parent'a apakšsadaļas:

xg5km2uzvoyay2i2kqzy.png

 

Tad spiežu uz kādas apakšsadaļas un menu man atkal pārvēršas par šo:

n49n5ibpiq9rzs81l79g.png

 

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:

xg5km2uzvoyay2i2kqzy.png

 

 

Nu tā.... Paldies! :)

Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • 2 weeks later...

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...