RE: Better way of doing this? (menu and submenus)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



You could use a recursive function and keep it all in one table. 

My Table is similar to the one below:

ID	NAME	PID	DISPLAY_ORDER

Here's crude recursive function to display this in a list typical of what
you used to style a menu. The great thing about this is that you could have
unlimited submenus if you wanted ...

function displayMenu( $pid )
{
	global $db;
	
	$res =& $db->query( "SELECT * FROM tblmenu WHERE pid = '".$pid."'
ORDER BY display_order" );
	mysqlErrorCheck( $res );

	while( $res->fetchInto( $objData ) )
	{
		$html .= "<li>".$objData['name'];
		$html .= "<ul>".displayMenu( $objData['id'] )."</ul>";
		$html .= "</li>";
	}
	
	return $html;
}


echo "<ul>".displayMenu('0')."</ul>";


-----Original Message-----
From: Ryan A [mailto:genphp@xxxxxxxxx] 
Sent: Wednesday, June 21, 2006 10:51 AM
To: Philip Thompson; php-general@xxxxxxxxxxxxx
Subject: Re:  Better way of doing this? (menu and submenus)


> Ryan,
> 
> I have run into a similar problem with one of the
> sites I'm designing.  
> Here's the approach I took. You can see if it fits
> your needs.
> 
> Here's an example of  
> what I have:
> 
> MID  NAME        PARENT_ID  LOCATION
> 1    Home        <null>     index.php
> 2    Products    <null>     products.php
> 3    Information <null>     info.php
> 10   Profile     1          profile.php
> 11   Account     1          account.php
> 20   Hardware    2          hardware.php
> 21   Software    2          software.php
> 210  M$ Word     21         msword.php
> 211  iLife       21         ilife.php
> 
> And I think you get the drift. 
> You can keep getting deeper in the  
> tree structure and not have to worry about adding
> more tables.
> 
> Notice that the menu_item_id (MID) actually has some
> organization to  
> it, but this is completely optional. As the menu
> items grow, this will  
> probably be more difficult to keep track of. Anyway,
> hope that helps!



@Phillip,
Thanks for replying.

Because (like you pointed out) the MID can get a
little crazy I was thinking of using two tables, one
for parent and the other for the children.

Also, I forgot to mention in my first post, I am using
a p_position (parent position) and c_position (child)
for each of the menu items, that way I can do a ORDER
BY in my query and it should still look good and
changing positions shouldnt be a problem (ask anyone
who's married, being flexable in changing positions is
VERY important :-D )
Doing an ORDER BY on two tables in also a bit more
simple than one (IMHO, feel free to correct me)

I really appreciate your input on this as I am in the
theory stage while you have actually made something
like this, thanks again.



@K. Bear - Thanks for the link, I'll check it out as
soon as i get a little time.

Cheers!
Ryan




------
- The faulty interface lies between the chair and the keyboard.
- Creativity is great, but plagiarism is faster!
- Smile, everyone loves a moron. :-)

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux