如何更改Joomla 3 default.php文件中的菜单类以模拟自定义菜单类

如何更改Joomla 3 default.php文件中的菜单类以模拟自定义菜单类,php,joomla,menu,zurb-foundation,Php,Joomla,Menu,Zurb Foundation,好的,背景如下: 1.我希望joomla菜单导航从其默认类切换到我的自定义类,并为pages活动菜单项添加一个标记(如果需要) default.php文件中的默认类是 <ul class="nav menu<?php echo $class_sfx;?>"<?php $tag = ''; if ($params->get('tag_id') != null) { $tag = $params->get('tag_id') . ''; echo

好的,背景如下: 1.我希望joomla菜单导航从其默认类切换到我的自定义类,并为pages活动菜单项添加一个标记(如果需要)

default.php文件中的默认类是

<ul class="nav menu<?php echo $class_sfx;?>"<?php
$tag = '';

if ($params->get('tag_id') != null)
{
    $tag = $params->get('tag_id') . '';
    echo ' id="' . $tag . '"';
}
 ?>>
 <?php
 foreach ($list as $i => &$item)
 {
$class = 'item-' . $item->id;

if ($item->id == $active_id)
{
    $class .= ' current';
}

if (in_array($item->id, $path))
{
    $class .= ' active';
}
elseif ($item->type == 'alias')
{
    $aliasToId = $item->params->get('aliasoptions');

    if (count($path) > 0 && $aliasToId == $path[count($path) - 1])
    {
        $class .= ' active';
    }
    elseif (in_array($aliasToId, $path))
    {
        $class .= ' alias-parent-active';
    }
}

if ($item->type == 'separator')
{
    $class .= ' divider';
}

if ($item->deeper)
{
    $class .= ' deeper';
}

if ($item->parent)
{
    $class .= ' parent';
}

if (!empty($class))
{
    $class = ' class="' . trim($class) . '"';
}

echo '<li' . $class . '>';

// Render the menu item.
switch ($item->type) :
    case 'separator':
    case 'url':
    case 'component':
    case 'heading':
        require JModuleHelper::getLayoutPath('mod_menu', 'default_' .                                                 $item->type);
        break;

    default:
        require JModuleHelper::getLayoutPath('mod_menu', 'default_url');
        break;
endswitch;

// The next item is deeper.
if ($item->deeper)
{
    echo '<ul class="nav-child unstyled small">';
}
elseif ($item->shallower)
{
    // The next item is shallower.
    echo '</li>';
    echo str_repeat('</ul></li>', $item->level_diff);
}
else
{
    // The next item is on the same level.
    echo '</li>';
}
 }
 ?></ul>
>

通过浏览器的输出如下所示

<ul class="nav menu">
<li class="item-101 current active"><a href="/">Home</a></li></ul>
我希望它的输出是这个

 <ul class="title-area">
    <li class="name">
    <h1><a href="#">My Site</a></h1>
  </li>
 </ul>
我粗野的直觉会告诉我将导航更改为标题区域,但我不确定如何将“名称”合并到li结构中

此外,我假设标签只针对当前处于活动状态或存在的页面。。。这将是很好的合并以及。。。因为我的基础CSS结构已经把线高度分配给HTML的结构。p>
谢谢你的帮助

好的,经过测试,我找到了正确的答案。现在,这个解决方案基本上适用于Joomla默认菜单系统中的任何菜单和下拉菜单结构

我已经完成了这个解决方案的基础5菜单设置(稍后我会尝试一个不同的菜单系统,但想法应该是相同的)。p> 对于菜单模块,请转到此处的default.php:/modules/mod_menu/tmpl

默认设置具有导航菜单的类结构,如下所示:

<ul class="nav menu<?php echo $class_sfx;?>"<?php
$tag = '';
将其更改为此(之后):

以及子项需要更改

所以在这一行(之前):

//下一项更深入。
如果($item->deep)
{
echo'
    ; }
将其更改为此(之后):

//下一项更深入。
如果($item->deep)
{
echo'
    ; }

我认为最好添加一个插件,该插件可以修改后端菜单设置,包括要添加或更改的类
,您了解布局覆盖的基本概念吗?您所需要做的就是复制该文件并将其添加到正确文件夹中的模板中,然后可以根据需要修改它。我不确定你的问题是关于给类添加名称。。。只需输入名称。如果你真的想让它出现在每个菜单链接上,只需说
$class='name item-'$项目->标识我不建议删除其他类,因为它们给了您很多自定义功能。@Elin我正在构建一个模板。我删除了那里的类,因为我没有使用它们。构建一个插件来修改或其他东西会很好,但这就是它背后的原因。实际上,我按照你的建议做了。对,所以你只是做了一个替代。我只是认为,您可以留在允许您根据其ID修改高度特定项的类中,这是一种未来的证明。允许在
  • 中添加样式是合理的,就像在制作菜单项时,您当前可以为
    添加样式一样,但实际上,对于一个严肃的模板,我想你应该按照你现在的方式来做,因为你可以拥有完全的控制权。在所有菜单模块中已经有了一些选项,除了所有模块都有的类之外,还可以为菜单添加专门的类。这可能对您来说还不够,但您可以尝试只使用menu class suffix参数,如果您不修改当前类,则在开始时留下一个空格。@如果我错了,请更正我,但向class suffix参数添加一个类不一定能让我控制“是”菜单上的“否”和“li”。因此,您可能只想将其添加到菜单模块的布局覆盖中,并添加echo或硬编码的类名。我不会把任何东西拿出来,只是把它添加到构建类字符串的第一步或最后一步。@Elin你说的是页面类后缀,因为这不起作用,它只会进入页面上的一个div。不,我是说你可以覆盖模块布局,并将类添加到适当的位置,我想说的是在代码的那一部分,它正在为
  • 标记构建类。它正在做一项复杂的工作,标记级别以及它是否处于活动状态,并且具有唯一的编号,这样我就不会将htat抛出,我会将您的添加到字符串中。
    <ul class="right nav menu<?php echo $class_sfx;?>"<?php
    $tag = '';
    
    if ($item->parent)
    {
        $class .= ' parent';
    }
    
    if ($item->parent)
    {
        $class .= ' has-dropdown parent';
    }
    
    // The next item is deeper.
    if ($item->deeper)
    {
     echo '<ul class="nav-child unstyled small">';
    }
    
    // The next item is deeper.
    if ($item->deeper)
    {
        echo '<ul class="dropdown nav-child unstyled small">';
    }