More than 800+ satisfied clients and counting, since 2010

Blog

Highlight Active Menu in Joomla CMS using Code

Joomla content management system is an easily customizable CMS with which you can edit any of its features. This post covers one such feature, how to highlight active menu in Joomla. Using this code you can differentiate the menu item in which a visitor is currently present from other menu items.

Highlight Active Menu in Joomla

How to Highlight Active Menu in Joomla CMS?

Use the following code to highlight active menu in Joomla. Paste it in your mod_mainmenu.

<?php
// no direct access
 defined('_JEXEC') or die('Restricted access');
if ( ! defined('fancyMenuPatch') )
 {
 function fancyMenuPatch($result,$tag){
 $menu   = JSite::getMenu();
 $active = $menu->getActive();
// Add to the start of the UL tag.
 $begin_ul = "<ul id="top-nav" class="flatList">";
 $begin_span = "<span class="embed embed-top-nav">";
$home_p = "Home</span><p>news, highlights</p></a>";
 $watch_p = "Watch UNC-TV</span><p>schedule, programs</p></a>";
 $learn_p = "Learn</span><p>education, unc-tv kids</p></a>";
 $support_p = "Support Us</span><p>pledge, volunteer, corporate</p></a>";
 $contact_p = "Contact</span><p>feedback, connect, share</p></a>";
// do the replacements
 $result = str_replace("<ul class="menu">",$begin_ul, $result);
 $result = str_replace("<span>", $begin_span, $result);
 $result = str_replace("Home</span></a>",$home_p,$result);
 $result = str_replace("Watch UNC-TV</span></a>",$watch_p,$result);
 $result = str_replace("Learn</span></a>",$learn_p,$result);
 $result = str_replace("Support Us</span></a>",$support_p,$result);
 $result = str_replace("Contact</span></a>",$contact_p,$result);
return $result;
 }
 define('fancyMenuPatch', true);
 }
if ( ! defined('modMyMainMenuXMLCallbackDefined') )
{
function modMyMainMenuXMLCallback(&$node, $args)
{
$user  = &JFactory::getUser();
$menu  = &JSite::getMenu();
$active  = $menu->getActive();
$path  = isset($active) ? array_reverse($active->tree) : null; if (($args['end']) && ($node->attributes('level') >= $args['end']))
 {
$children = $node->children();
foreach ($node->children() as $child)
{
if ($child->name() == 'ul') {
$node->removeChild($child);
} } }
if ($node->name() == 'ul') {
foreach ($node->children() as $child)
{
if ($child->attributes('access') > $user->get('aid', 0)) {
$node->removeChild($child);
} } }
if (($node->name() == 'li') && isset($node->ul)) {
$node->addAttribute('class', 'parent');
}
if (isset($path) && in_array($node->attributes('id'), $path))
{
if ($node->attributes('class')) {
$node->addAttribute('class', $node->attributes('class').' active');
} else {
$node->addAttribute('class', 'active');
} }
else
{
if (isset($args['children']) && !$args['children'])
{
$children = $node->children();
foreach ($node->children() as $child)
{
if ($child->name() == 'ul') {
$node->removeChild($child);
} } } }
if (($node->name() == 'li') && ($id = $node->attributes('id'))) {
if ($node->attributes('class')) {
$node->addAttribute('class', $node->attributes('class').' item'.$id);
} else {
$node->addAttribute('class', 'item'.$id);
} }
if (isset($path) && $node->attributes('id') == $path[0]) {
$node->addAttribute('id', 'current');
} else {
$node->removeAttribute('id');
}
$node->removeAttribute('level');
$node->removeAttribute('access');
}
define('modMyMainMenuXMLCallbackDefined', true);
}
ob_start();
modMainMenuHelper::render($params, 'modMyMainMenuXMLCallback');
 $menu_html = ob_get_contents();
 ob_end_clean();
if($params->get('menutype')=="mainmenu"){
 $tag = $params->get('tag_id');
 }
//output the menu!
 echo fancyMenuPatch($menu_html,$tag);
 ?>

Written by

The author didnt add any Information to his profile yet