Jump to content

Making menu with submenu


Bravat

Recommended Posts

I am trying to make menu with submenu. I have two tables:

meni(id_meni, naslov, pozicija, lang_id) and

subjects (subjecte_id, naslov, text, meni_id, lang_id, pozicija).

Into subjects(meni_id) is written meni(id_meni) value in order to determinate what menu items are having summenu options. How can i do this? I tried following code, but it only display items from meni table:

<?php
                 $query_meni =mysql_query("SELECT * FROM meni WHERE lang_id = '$jezik'");
			 $query_subject =mysql_query("SELECT * FROM subjects WHERE lang_id = '$jezik'");
			 while($row_meni = mysql_fetch_array($query_meni)){
				 echo "<li>";
				echo "<a href=\"index.php?page=";
				echo $row_meni['id_meni'];
				echo "\">";
				echo $row_meni['naslov'];
				echo "</a>";
					while($row_subjects = mysql_fetch_array($query_subject)){
						if($row_meni['id_meni'] == $row_subjects['meni_id']){
							echo "<ul class=\"subnav\">";
							echo "<li>";
							echo 	"<a href=\"index.php?subject=";
							echo $row_subjects['subject_id'];
							echo "\">";
							echo $row_subjects['naslov'];
							echo "</li>";
							echo "</a>";
							echo "</ul>";
							}
						}
				echo "</li>"; 
			 }
			?>

Link to comment
Share on other sites

Hi, I have done these menus before and I think you need to start with a <ul> before any while loop. While inside the first loop for the fist menu print <li> link </li> then if the second sql query has a result the second <ul> that starts the submenu needs to print before the second while loop. The second while loop needs to print only <li> link </li>. once that loop is done close the second </ul> ending the submenu.

After you closed the first loop then close </li> and </ul>.

 

 

[attachment deleted by admin]

Link to comment
Share on other sites

this is the code you posted on another post

<li><a href="#">Home</a></li>
                    <li><a href="#">About Us</a></li>
                    <li><a href="#">Web Design</a>
                    	<ul class="subnav">
                        	<li><a href="#">Corporate</a></li>
                            <li><a href="#">Small Business</a></li>
                            <li><a href="#">HTML Templates</a></li>
                            <li><a href="#">Joomla Templates</a></li>
                        </ul>
                    </li>

so to make it work with what you have

 

// make your sql_query
// count the affected rows
// if not 0 start the menu by printing <ul>

// start your first loop
print "<li><a href=\"$some_link\">$some_column</a>"; \\ do not close <li> yet because you dont know if it has a submenu

// do the second sql query
// count the affected rows
// if 0 rows then 
print "</li>"; \\ to close that one and move on with the next

// else  (not 0 rows) then
print "<ul class=\"subnav\">";

// now run your second while loop
print"<li><a href=\"$sub_page\">$submenu_item</a></li>";
                           //etc  <li><a href="#">Small Business</a></li>
                            <li><a href="#">HTML Templates</a></li>
                            <li><a href="#">Joomla Templates</a></li> //
endwhile;
                print"</ul>";
endif;
          print"</li>";

//and repeat

 

if for some reason you need to link to anchors in the same page you need to set the mainmenu link to "#" as opposed to "website_file.php#"

and the submenues to "#anchor" instead of "website_file.php#anchor" or they will not work. i used PHP_SELF  to check if I was inside the page or not. so if the page I was in was about.php and i had anchors in it i would

print"<li><a href=\"#123\">$submenu_item</a></li>"; if it was not about.php i would

print"<li><a href=\"about.php#123\">$submenu_item</a></li>";

Link to comment
Share on other sites

I think that I am doing something wrong here, but I cannot see error. I managed to create submenu for specific menu, but it only shows one item in subemnu. Here is the code:

<?php
                 $query_meni =mysql_query("SELECT * FROM meni  WHERE lang_id = '$jezik'");
			if(mysql_affected_rows() >0 ){
			 while($row_meni = mysql_fetch_array($query_meni)){
				 echo "<li>";
				echo "<a href=\"index.php?page=";
				echo $row_meni['id_meni'];
				echo "\">";
				echo $row_meni['naslov'];
				echo "</a>";
				 $query_subject =mysql_query("SELECT * FROM subjects WHERE meni_id = '$row_meni[id_meni]' AND lang_id = '$jezik' ORDER BY pozicija ASC");	
						if(mysql_affected_rows() == 0){
							echo "<li>";}
							else {
							while($row_subjects = mysql_fetch_array($query_subject)){
							echo "<ul class=\"subnav\">";
							echo "<li>";
							echo 	"<a href=\"index.php?subject=";
							echo $row_subjects['subject_id'];
							echo "\">";
							echo $row_subjects['naslov'];
							echo "</li>";
							echo "</a>";
							echo "</ul>";
							}
							}
							}				
				echo "</li>"; 
			 }
			?>

Link to comment
Share on other sites

try this. i have not tested it but...

<?php
     $query_meni = "SELECT * FROM meni  WHERE lang_id = '$jezik'";
     $result = mysql_query($query_meni);
     $count = mysq_affected_rows();
	if($count >0 ):
	print"<ul class=\"main_menu\">"; /// open main menu
		while($row_meni = mysql_fetch_array($query_meni)):
		$link = $row_meni['id_meni'];
		$show = $row_meni['naslov'];
		print"<li><a href=\"index.php?page=$link\">$show</a>";

$query_subject = "SELECT * FROM subjects WHERE meni_id = '$row_meni[id_meni]' AND lang_id = '$jezik' ORDER BY pozicija ASC";	
        $result1 = mysql_query($query_subject);
$count1 = mysql_affected_rows();

		if($count1 == 0):
		print "</li>"; /// close list
			else:
			print"<ul class=\"subnav\">"; /// start sublist before 2nd while loop
					while($row_subjects = mysql_fetch_array($query_subject)):
					$link1 = $row_subjects['subject_id'];
					$show1 = $row_subjects['naslov'];
					print"<li> <a href=\"index.php?subject=$link1\">$show1</a></li>";
					endwhile;
					print"</ul>"; /// end sublist after while loop
			endif;
			print"</li>"; /// close list at endif
		endwhile;				
		print"</li>"; ///close parent
	endif;
	print"</ul>";  /// close main
?>

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

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

  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.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.