Jump to content

PHP menu retrieve parent/child


MNO

Recommended Posts

Hi there! I'm having some problems in this code... (plaincart)

 

I have 2 pages:

 

 1. index.php (is my main page where is the left menu);

 2. functions.php (where is the PHP functions, necessary to build

    the menu at index.php).

 

 

----------

 

 

At this point all code is correct...

the main menu is showing like this...

 

 1. Women

 2. Men

 3. Children

 

 

----------

 

 

When I click, for example at "Women", the menu is showing like this...

 

 1. Women

 - Coats

 - Blazers

 - Dresses

 2. Men

 3. Children

 

 

----------

 

But, my big question is: how to show the menu always like this:

 

 1. Women

 - Coats

 - Blazers

 - Dresses

 2. Men

 - Coats

 - Blazers

 - Shirts

 3. Children

 - Boys

 - Girls

 

 

----------

 

 

**QUESTION:** How to show always the parent id of the main categories... Perhaps a little modification in functions.php > formatCategories(); ?

 

 

 

******************* index.php ******************* 

 



    $catId  = (isset($_GET['c']) && $_GET['c'] != '1') ? $_GET['c'] : 0;


    // get all categories
    $categories = fetchCategories();
    
    // format the categories for display
    $categories = formatCategories($categories, $catId);
    ?>
    <ul>
    <li><a href="<?php echo $_SERVER['PHP_SELF']; ?>">All Category</a></li>
    <?php
    foreach ($categories as $category) {
    extract($category);
    // now we have $cat_id, $cat_parent_id, $cat_name
   
    $level = ($cat_parent_id == 0) ? 1 : 2;
        $url   = $_SERVER['PHP_SELF'] . "?c=$cat_id";
    
    // for second level categories we print extra spaces to give
    // indentation look
    if ($level == 2) {
    $cat_name = '    » ' . $cat_name;
    }
   
    // assign id="current" for the currently selected category
    // this will highlight the category name
    $listId = '';
    if ($cat_id == $catId) {
    $listId = ' id="current"';
    }
    ?>
    <li<?php echo $listId; ?>><a href="<?php echo $url; ?>"><?php echo $cat_name; ?></a></li>
    <?php
    }
    ?>
    </ul>


 

******************* functions.php ******************* 

 

   


function formatCategories($categories, $parentId)
    {
    // $navCat stores all children categories
    // of $parentId
    $navCat = array();
   
    // expand only the categories with the same parent id
    // all other remain compact
    $ids = array();
    foreach ($categories as $category) {
    if ($category['cat_parent_id'] == $parentId) {
    $navCat[] = $category;
    }
   
    // save the ids for later use
    $ids[$category['cat_id']] = $category;
    }
    
    $tempParentId = $parentId;
   
    // keep looping until we found the 
    // category where the parent id is 0
    while ($tempParentId != 0) {
    $parent    = array($ids[$tempParentId]);
    $currentId = $parent[0]['cat_id'];
    
    // get all categories on the same level as the parent
    $tempParentId = $ids[$tempParentId]['cat_parent_id'];
    foreach ($categories as $category) {
       // found one category on the same level as parent
    // put in $parent if it's not already in it
    if ($category['cat_parent_id'] == $tempParentId && !in_array($category, $parent)) {
    $parent[] = $category;
    }
    }
   
    // sort the category alphabetically
    array_multisort($parent);
   
    // merge parent and child
    $n = count($parent);
    $navCat2 = array();
    for ($i = 0; $i < $n; $i++) {
    $navCat2[] = $parent[$i];
    if ($parent[$i]['cat_id'] == $currentId) {
    $navCat2 = array_merge($navCat2, $navCat);
    }
    }
   
    $navCat = $navCat2;
    }
    
    
    return $navCat;
    }

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.