2008-12-29 112 views
4

我想编辑输出joomla main_menu模块,所以我可以做一个自定义的下拉菜单。目前,它目前输出HTML这样的:Joomla主菜单html输出

<ul class="menu"> 
<li class="active item1" id="current"><a href="#"><span>First Level Item </span</a></li> 
<li class="parent item63"><a href="#"><span>First Level Item Parent</span></a> 
<ul> 
    <li class="item60"><a href="#"><span>Second Level Item</span></a></li> 
    <li class="item69"><a href="#"><span>Second Level Item</span></a></li> 
</ul> 
</li> 
<li class="item64"><a href="#"><span>First Level Item</span></a></li> 
<li class="item66"><a href="#"><span>First Level Item</span></a></li> 

我想要做的是去除跨度标签的输出。

我所知道的,到目前为止是,如果我想要编辑的输出;在我的模板文件夹中,我创建一个名为'html'的目录,然后在一个名为'mod___mainmenu'的新目录中,然后从模块目录的现有mod_mainmenu文件夹中复制default.php文件。我对文件进行的所有更改都会更改输出。

我遇到的问题是我无法理解在default.php文件中编写的代码发生了什么,因为它使用了一些我不喜欢的XML系统,并且没有任何评论。

如果有人有任何想法,将是超级有用!

这里是从菜单中如default.php文件中的代码:

defined('_JEXEC') or die('Restricted access'); 


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)) 
    { 
     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('modMainMenuXMLCallbackDefined', true); 
} 
modMainMenuHelper::render($params, 'modMainMenuXMLCallback'); 
+0

这是几十个我讨厌和拒绝使用的Joomla的原因之一。 – ceejayoz 2008-12-29 20:03:08

回答

2

事实证明,跨度标签是在一个完全不同的文件添加。

如果你到模块/ mod_mainmenu目录下有一个helper.php文件还控制一些输出。

在线路285和293有在代码中的一些span标签。删除那些使输出按照我想要的方式工作的人。

6

你应该避免编译内核文件,只要有可能,以避免当你升级你的更改覆盖。改为使用模板覆盖文件。

当我遇到了这个,我想补充和空EM标签给每个菜单项允许Gilder/Levin image replacement。在我的HTML重写({TEMPLATEDIR} \ HTML \ mod_mainmenu \如default.php)我周围有一个输出缓冲区调用modMainMenuHelper ::渲染(最后一行,基本),并用一个简单的str_replace函数添加EM标签:

ob_start(); 
modMainMenuHelper::render($params, 'modMainMenuXMLCallback'); 
$mainMenuContent = ob_get_clean(); 
echo str_replace('</span>', '</span><em></em>', $mainMenuContent); 

既然你只是想摆脱跨度标签,你可以这样做:

ob_start(); 
modMainMenuHelper::render($params, 'modMainMenuXMLCallback'); 
$mainMenuContent = ob_get_clean(); 
echo str_replace(array('<span>','</span>'), array('',''), $mainMenuContent);