突出显示Joomla中的活动菜单项

时间:2011-03-04 18:51:55

标签: joomla

我正在覆盖Joomla 1.5中的mod_mainmenu模块,无法获取要在页面上显示的.active#current CSS类或ID。它显示菜单的以下HTML:

<ul id="top-nav" class="flatList">
  <li access="0" level="1" id="1">
    <a href="#">
      <span class="embed embed-top-nav">Home</span>
      <p>news, highlights</p>
    </a>
  </li>
  <li access="0" level="1" id="4">
    <a href="/content/index.php?option=com_content&amp;view=article&amp;id=1&amp;Itemid=4">
      <span class="embed embed-top-nav">Watch UNC-TV</span>
      <p>schedule, programs</p>
    </a>
  </li>
</ul>

我已经读过mod_mainmenu会自动在此处插入activecurrent,这样您就可以知道哪个项目是当前活动的菜单选择。但我没有看到生成的HTML中的任何一个。我想将一些CSS应用于活动元素,但似乎没有任何方法可以做到这一点。有什么想法吗?

感谢。

更新:这是我创建的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('modMainMenuXMLCallbackDefined') )
{
function modMainMenuXMLCallback(&$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) || in_array($node->attributes('rel'), $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('rel');
  $node->removeAttribute('level');
  $node->removeAttribute('access');
}
  define('modMainMenuXMLCallbackDefined', 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);
?>

2 个答案:

答案 0 :(得分:3)

试试这个,这里是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);
?>

答案 1 :(得分:1)

检查你的模板文件夹,有一个template.css文件,你可以在那里找到!