I have this function it allows me to create multi level menu
the problem after I finish the code, using "echo", I tried to make it work in return but it did not give me the sub menu it shows only the main menu!
and If I keep using the echo method i get the code in the top of the page!
any ideas what should I do
Echo code :
function showMenu($level = 0,$site_url,$get_type_sec,$get_sub_type_sec) {
$result = mysql_query("SELECT * FROM pages WHERE parent_id ='$level' order by navigation_order ASC");
echo "<ul>";
while ($node = mysql_fetch_array($result)) {
$result2 = mysql_query("SELECT * FROM pages WHERE id ='$node[parent_id]' order by navigation_order ASC");
while ($node2 = mysql_fetch_array($result2)) {$node3="$node2[query_string]/";
$noder="$node[id]";
$result3 = mysql_query("SELECT * FROM pages WHERE id ='$node2[parent_id]' order by navigation_order ASC");
while ($node3 = mysql_fetch_array($result3)) {$node2="$node3[query_string]/"; }
}
echo "<li><a href='$site_url/$node2$node3$node[query_string]/'> $node[title] </a> ";
$hasChild = mysql_fetch_array(mysql_query("SELECT * FROM pages WHERE id ='$node[id]'")) != null;
// If user request same page open menu
IF ($hasChild && $node['query_string']=="$get_type_sec") {
showMenu($node['id'],$site_url,$get_type_sec,$get_sub_type_sec);
}
elseif($hasChild && $node['query_string']=="$get_sub_type_sec") {
showMenu($node['id'],$site_url,$get_type_sec,$get_sub_type_sec);
}
echo "</li>";
}
echo "</ul>";
}
Return Code
function showMenu($level = 0,$site_url,$get_type_sec,$get_sub_type_sec) {
$result = mysql_query("SELECT * FROM pages WHERE parent_id ='$level' order by navigation_order ASC");
$echo = "<ul>";
return = $echo;
while ($node = mysql_fetch_array($result)) {
$result2 = mysql_query("SELECT * FROM pages WHERE id ='$node[parent_id]' order by navigation_order ASC");
while ($node2 = mysql_fetch_array($result2)) {$node3="$node2[query_string]/";
$noder="$node[id]";
$result3 = mysql_query("SELECT * FROM pages WHERE id ='$node2[parent_id]' order by navigation_order ASC");
while ($node3 = mysql_fetch_array($result3)) {$node2="$node3[query_string]/"; }
}
$echo .= "<li><a href='$site_url/$node2$node3$node[query_string]/'> $node[title] </a> ";
return = $echo;
$hasChild = mysql_fetch_array(mysql_query("SELECT * FROM pages WHERE id ='$node[id]'")) != null;
// If user request same page open menu
IF ($hasChild && $node['query_string']=="$get_type_sec") {
showMenu($node['id'],$site_url,$get_type_sec,$get_sub_type_sec);
}
elseif($hasChild && $node['query_string']=="$get_sub_type_sec") {
showMenu($node['id'],$site_url,$get_type_sec,$get_sub_type_sec);
}
$echo .= "</li>";
return = $echo;
}
$echo .= "</ul>";
return = $echo;
}
Change return = $echo to return $echo;
it turns that I need to add echo
when I call the function inside it self
//before
showMenu($node['id'],$site_url,$get_type_sec,$get_sub_type_sec);
//after
echo showMenu($node['id'],$site_url,$get_type_sec,$get_sub_type_sec);
the final code will be:
function showMenu($level = 0,$site_url,$get_type_sec,$get_sub_type_sec) {
$result = mysql_query("SELECT * FROM pages WHERE parent_id ='$level' order by navigation_order ASC");
$menu= "<ul>";
return $menu;
while ($node = mysql_fetch_array($result)) {
$result2 = mysql_query("SELECT * FROM pages WHERE id ='$node[parent_id]' order by navigation_order ASC");
while ($node2 = mysql_fetch_array($result2)) {$node3="$node2[query_string]/";
$noder="$node[id]";
$result3 = mysql_query("SELECT * FROM pages WHERE id ='$node2[parent_id]' order by navigation_order ASC");
while ($node3 = mysql_fetch_array($result3)) {$node2="$node3[query_string]/"; }
}
$menu.= "<li><a href='$site_url/$node2$node3$node[query_string]/'> $node[title] </a> ";
return $menu;
$hasChild = mysql_fetch_array(mysql_query("SELECT * FROM pages WHERE id ='$node[id]'")) != null;
// If user request same page open menu
IF ($hasChild && $node['query_string']=="$get_type_sec") {
echo showMenu($node['id'],$site_url,$get_type_sec,$get_sub_type_sec);
}
elseif($hasChild && $node['query_string']=="$get_sub_type_sec") {
echo showMenu($node['id'],$site_url,$get_type_sec,$get_sub_type_sec);
}
$menu.= "</li>";
return $menu;
}
$menu.= "</ul>";
return $menu;
}