Superfish Menu Fix for Joomla 1.5

So after moving some menu items around on a website, a client calls up noting issues with the ordering of items in the menu. This site is not using the usual mainmenu module from Joomla, but another module called “Superfish Dropdown Menus“. Apparently this is a pretty common issue and only affects people that have moved or removed anything in their menu. So, after much head scratching and trying things out, I finally came up with a fix for the menu ordering issue:

First, add the following functions to the “superfish_modMainMenuHelper” class in the “helper.php” file:

function sortParent($x, $y){
  if($x->parent==$y->parent){
    return 0;
  }else if($x->parent < $y->parent){
    return -1;
  }else{
    return 1;
  }
}

function sortByOrdering($x, $y){
  if($x->ordering==$y->ordering){
     if($x->parent==$y->parent){
        return 0;
     }else if($x->parent < $y->parent){
       return -1;
     }else{
       return 1;
     }
   }else if($x->ordering < $y->ordering){
      if($x->parent==$y->parent){
         return 0;
      }else if($x->parent < $y->parent){
         return -1;
      }else{
        return 1;
      }
   }else{
      return 1;
   }
}

Next, just above the line “$user =& JFactory::getUser();” in the buildXML function, insert the following lines of code:

usort($rows, array("superfish_modMainMenuHelper", "sortParent"));
usort($rows, array("superfish_modMainMenuHelper", "sortByOrdering"));

This will sort the items by what their parent is and then sorts by the ordering, taking into account the ordering of the parent items. After that, the buildXML function will take care of putting the menu together.

A really strange issue and really frustrating fix.

I also make no warranty on the above fixes. I’ll answer questions, but don’t expect me to repair your site for you (backups are your friend).

Tags: , , , , , , , , ,

Leave a Reply

You must be logged in to post a comment.