【问题标题】:Joomla main menu html outputJoomla 主菜单 html 输出
【发布时间】:2008-12-29 19:44:08
【问题描述】:

我正在尝试编辑输出 joomla main_menu 模块,以便制作自定义下拉菜单。目前它输出的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 系统并且没有 cmets。

如果有人有任何非常有用的想法!

这是菜单的 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');

【问题讨论】:

  • 这是我讨厌并拒绝使用 Joomla 的几十个原因之一。
  • 但我想你会在 joomla 论坛上得到更好的答案!
  • 此页面可能会有所帮助:fatica.net/blog/…

标签: joomla joomla1.5


【解决方案1】:

您应尽可能避免编辑核心文件,以免在升级时覆盖您的更改。改用模板覆盖文件。

当我遇到这个问题时,我想为每个菜单项添加并清空 em 标签以允许Gilder/Levin image replacement。在我的 html 覆盖 ({templatedir}\html\mod_mainmenu\default.php) 中,我用输出缓冲区包围了对 modMainMenuHelper::render 的调用(基本上是最后一行),并使用了一个简单的 str_replace 来添加 em 标签:

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

既然你只是想去掉 span 标签,你可以这样做:

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

【讨论】:

    【解决方案2】:

    原来span标签被添加到了完全不同的文件中。

    如果你进入 modules/mod_mainmenu 目录,会有一个 helper.php 文件,它也控制一些输出。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      相关资源
      最近更新 更多