tags:

views:

57

answers:

1

I am using a function to spit out my main and sub menu's for me. Basically I feed it a page ID and it gives me the menu with the menu item properly highlighted through CSS.

What I'm asking is: How do I improve this code (and others like it that I have laying around)? Lowering the amount of lines of code and decreasing repetition of code? I know a Switch statement is faster than the old if/else conditional statements but I'm not sure how to highlight my HTML menu item if I use a switch.

The css class (class="sub_active_link") is responsible for highlighting the current menu item. A non-highlighted link is (class="sub_link").

I don't need the code re-written, just the concept or best practice for a situation like this.

Any ideas or direction is greatly appreciated and thanks for helping me become a more complete programmer.

function top_menu_logged_in_sub_menu($user, $page ='main')
{
 $sub_menu_html = '<div id="sub_nav"><ul>';
 if($page == 'main'){
  $sub_menu_html.= '
      <li><img src="images/nav_2_lev_tab_Hi_L.gif" alt=""/></li>
      <li class="sub_link_active"><span><a href="main.php">My Admin</a></span></li>
      <li><img src="images/nav_2_lev_tab_Hi_R.gif" alt="" /></li>
     ';
 }
 else{
  $sub_menu_html.= '
      <li><img src="images/nav_2_lev_tab_L.gif" width="8" height="26" /></li>
      <li class="sub_link"><span><a href="main.php">My Admin</a></span></li>
      <li ><img src="images/nav_2_lev_tab_R.gif" alt="" /></li>
     ';
 }
 if($page == 'myProjects'){
  $sub_menu_html.= '
      <li ><img src="images/nav_2_lev_tab_Hi_L.gif" alt="" /></li>
      <li class="sub_link_active"><span><a href="myProjects.php">My Projects</a></span></li>
      <li><img src="images/nav_2_lev_tab_Hi_R.gif" alt="" /></li>
     ';
 }
 else{
  $sub_menu_html.= '
      <li><img src="images/nav_2_lev_tab_L.gif" alt="" /></li>
      <li class="sub_link"><span><a href="myProjects.php">My Projects</a></span></li>
      <li><img src="images/nav_2_lev_tab_R.gif" alt="" /></li>
     ';
 }
 if($page == 'insertProject'){
  $sub_menu_html.= '
      <li><img src="images/nav_2_lev_tab_Hi_L.gif" alt="" /></li>
      <li class="sub_link_active" ><span><a href="insertProject.php">Post a Project</a></span></li>
      <li><img src="images/nav_2_lev_tab_Hi_R.gif" alt="" /></li>
     ';
 }
 else{
  $sub_menu_html.= '
      <li><img src="images/nav_2_lev_tab_L.gif" /></li>
      <li class="sub_link"><span><a href="insertProject.php">Post a Project</a></span></li>
      <li><img src="images/nav_2_lev_tab_R.gif" /></li>
     ';
 }
 if($page == 'myAccount'){
  $sub_menu_html.= '
      <li><img src="images/nav_2_lev_tab_Hi_L.gif" /></li>
      <li class="sub_link_active" ><span><a href="myAccount.php">My Account</a></span></li>
      <li><img src="images/nav_2_lev_tab_Hi_R.gif" /></li>
     ';
 }
 else{
  $sub_menu_html.= '
      <li><img src="images/nav_2_lev_tab_L.gif" /></li>
      <li class="sub_link"><span><a href="myAccount.php">My Account</a></span></li>
      <li><img src="images/nav_2_lev_tab_R.gif" /></li>
     ';
 }

 $sub_menu_html.= '
   </ul>
    <div class="user_id">
     Welcome, '.$user.'! &nbsp;&nbsp;<span class="sign_out"><a href="http://www.example.org/login.php?action=logout"&gt;Sign Out</a></span>&nbsp;&nbsp;
    </div>
  </div>
 ';
 return $sub_menu_html;
}
A: 

You could use an array, like this:

$pages=array('myAccount'=>'My Account', ...);

Then walk over it with foreach, compare the keys to the $page variable. In the html code put some ternary operators:

'<li><img src="images/nav_2_lev_tab_'.($page==$key?'Hi_':'').'L.gif" /></li>'

This way you could use the values of the $pages array for the links text.

You'll find out the rest.

Vili