phpjoomla

How to get specific menu items from joomla?


This question is bit specific for Joomla.

I have a main menu consisting of:

Home|About US|Privacy Policy|Portfolio|Contacts US.

Each menu item is link to an article.

Now on the complete site there are many places in the components and modules where I need to show two links : Privacy Policy & Portfolio.

Can someone please guide me? I do not want to hard code the links as the item id would differ in production.


Solution

  • There are 2 ways you can do it:

    Option 1:

    Joomla loads menus every time page is loads. You can access the menus by calling the following methods.

    // Get default menu - JMenu object, look at JMenu api docs
    $menu = JFactory::getApplication()->getMenu();
    
    // Get menu items - array with menu items
    $items = $menu->getMenu();
    
    // Look through the menu structure, once you understand it
    // do a loop and find the link that you need.
    var_dump($items);
    

    This method is faster because you don't need to query database. Simple operation in memory.

    Option 2:

    Get it from the database. Either get menu link from jos_menu based on alias or something, or get article # from jos_content by article alias, then create the link

    $db = JFactory::getDBO();
    
    //  Load by menu alias
    $query = "SELECT link FROM #__menu WHERE alias = 'privacy-policy'";
    $db->setQuery($query);
    $url = $db->loadResult();
    $url = JRoute::_($url);
    
    
    //  Load by article alias
    $query = "SELECT id FROM #__content WHERE alias = 'privacy-policy'";
    $db->setQuery($query);
    $articleId = (int) $db->loadResult();
    $url = JRoute::_("index.php?option=com_content&view=article&id=$articleId");