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

时间:2014-04-19 18:17:40

标签: php joomla menu zurb-foundation

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

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>

我粗野的直觉会告诉我将导航改为标题区但我不确定如何合并&#34; name&#34;进入李结构。

此外,我假设标签仅用于当前活动或存在的页面...这也很好合并...因为我的基础css结构已经分配了行高度html的结构。

帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

测试后确定我找到了正确的答案。现在这个解决方案通常适用于Joomla默认菜单系统中的任何菜单和下拉菜单结构。

我已经使用Foundation 5菜单设置完成了这个解决方案(稍后我将尝试不同的菜单系统,但想法应该是相同的)。

对于菜单模块,请转到位于此处的default.php:/ modules / mod_menu / tmpl

默认设置具有导航菜单的类结构:

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

将类更改为您需要的类结构。如果您100%绕过Joomla css(bootstrap)文件结构,那么您可以更改它......或者如果不是,您只需添加所需的类名。

这是我的改变:

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

现在,如果您正在关注新菜单系统的类结构(基础),则可能需要为<li和子菜单项指定一个类,即下拉菜单。

***请记住,对于Joomla在PHP中的菜单结构,它会提取项目编号,如果它是当前页面,它会自动将其标记为自动(自动)...所以不需要添加它,除了你要添加的课程。编辑*添加类“has-dropdown”应该是父级

就这一行(之前的):

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">';
}

我认为添加一个插件可以修改后端菜单设置以包含要添加或更改<ul<li菜单和子菜单子项的插件。

希望这对某人有帮助......我稍后会添加更多内容。

*我有一个错误,我正在使用这个和我正在使用的基础菜单。第一个孩子将显示,但如果那个孩子有一个子菜单项,它将不会显示...所以仍然需要修复。

*记得更改设置:将子菜单项显示为“是”