> From: <[EMAIL PROTECTED]>
>
> When I am in page A (or one of it's children) I wish to show it's one level of
> children like so:
> 
> Page A
>   Child 1
>   Child 2
>   etc...
> Page B
> 
> When I am in page B (or one of it's children) I wish to show it's one level of
> children like so:
> 
> Page A
> Page B
>   Child 1
>   Child 2
>   etc...
>  
> Do you get the picture?
>  
> I have a db with link url, id, parent id and title
>  
> does any one know of a simple function or something to do this for one level?

I wrote the code below for a menu system like this on a recent project:

----------

// declare class (s)elect (l)ist
class sl
{
  var $query;
  var $result;
  var $row;
  function set_query($new_value)
  {
    $this->query = $new_value;
  }
}
// create object (c)ategory (s)elect (l)ist
$csl = new sl();
// create object (s)ubcategory (s)elect (l)ist
$ssl = new sl();
// set query for object csl to display main categories
$csl->set_query("SELECT ID, Name FROM Categories WHERE ParentID=0");
$csl->result = mysql_query($csl->query);
// display the menu
while ($csl->row = mysql_fetch_array($csl->result))
{
  $ParentCatID=$csl->row["ID"];
  if ($csl->row["ID"] == $MainCatID)
  {
    echo("<p class=\"menuselected\">" .
      "<a href=$PHP_SELF?MainCatID=$ParentCatID>" .
      $csl->row["Name"] . "</a></p>\n");
    // set query for object (s)ubcategory (s)elect (l)ist
    $ssl->set_query("SELECT ID, Name, ParentID FROM Categories " .
      "WHERE ParentID=$MainCatID");
    $ssl->result = mysql_query($ssl->query);
    // display subcategories (submenu)
    while ($ssl->row = mysql_fetch_array($ssl->result))
    {
      $ParentCatID = $ssl-row["ParentID"];
      $ChildCatID = $ssl->row["ID"];
      if ($ssl->row["ID"] == $SubCatID)
      {
        echo("<p class=\"submenuselected\">" .
          "<a href=$PHP_SELF?MainCatID=" .
          "$ParentCatID&SubCatID=$ChildCatID>" .
          $ssl->row["Name"] . "</a></p>\n");
      }
      else
      {
        echo("<p class=\"submenu\">" .
          "<a href=$PHP_SELF?MainCatID=" .
          "$ParentCatID&SubCatID=$ChildCatID>" .
          $ssl->row["Name"] . "</a></p>\n");
      }
    }
  }
  // finish main category display
  else
  {
    echo("<p class=\"menu\">" .
      "<a href=$PHP_SELF?MainCatID=$ParentCatID>" .
      $csl->row["Name"] . "</a></p>\n");
  }
}

----------

Main menu categories have a ParentID assignment of 0 in the db. A select is
done of all ID & Name in the Categories table where ParentID=0. The menu is
displayed with names linked to recalling the script and passing the variable
$MainCatID -- the ID of the category. When the script is called with
$MainCatID set (when a main menu category is selected), the menu name with
ID matching $MainCatID is assigned a style class to distinguish visually
that it's selected. Also at this point another selection is done from
Categories where ParentID=$MainCatID, thus creating the list of
subcategories for the selected main category. The subcategories are also
displayed with links back to the script passing the variable $MainCatID
again plus the variable $SubCatID. When the script is called with $SubCatID
set, the submenu name with ID equal to $SubCatID is also class-styled to
indicate the selection.

The main page display (in this case for a products catalog) is generated by
other selection queries based on $MainCatID and $SubCatID.

--
Lowell Allen


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

Reply via email to