【问题标题】:In Joomla 2.5, How do I show only submenu items of one root Level item on all pages? [closed]在 Joomla 2.5 中,如何在所有页面上仅显示一个根级别项目的子菜单项? [关闭]
【发布时间】:2012-11-16 21:16:52
【问题描述】:

我正在使用 Joomla 2.5.8,我希望在网站的所有页面上都有一个二级菜单,仅显示主菜单中根菜单项 #2 的子菜单项。

Item 1 | Item 2 | Item 3 | Item 4
 --- Show just the below items ---
       | Item 2-1 |
       | Item 2-2 |
       | Item 2-3 |
       | Item 2-4 |

我尝试创建另一个菜单模块并设置开始和结束级别,但它只显示作为根菜单项一部分的页面。

我也试过不设置开始和结束级别选项,只是使用模板 css 来隐藏我不想要的项目,但是当我隐藏根菜单项时,我无法获得子菜单项显示。

我真的不想制作单独的菜单,因为如果主菜单有重大的菜单类型更改,我不必制作两次。

有什么想法吗?

【问题讨论】:

    标签: joomla menu joomla2.5 submenu


    【解决方案1】:

    这可能不是绝对最好的方法,但这是我暂时能想到的。

    对于父菜单项(第 2 项),将类型设置为“文本分隔符”。这将使它不再是一个正确的菜单项,并且很可能(取决于模板)将标签包裹在文本周围。

    然后打开一个属于模板的CSS文件,添加如下代码:

    span.classname {
        display:none;
    }
    

    显然,您需要将 "classname" 更改为赋予它的任何类。 Chrome 开发工具或 Firebug 将帮助您解决此问题。

    【讨论】:

    • 我一直在尝试显示无路由,并且由于子菜单项是根级别 li 内的 ul,所以当我执行 display:none 时,我无法带回子菜单 ul。我喜欢您将菜单项类型设置为文本分隔符的想法!我唯一没能很好隐藏的是根级别的锚,所以这可能会解决它。
    • 这是一种方法,但这样做的副作用是您指向下一级页面的 URL 将另外包含文本分隔符别名。值得考虑。
    【解决方案2】:

    这是我刚刚制作的一个模块。它从您选择的菜单项中呈现子菜单项。 在此处下载插件:Download

    如果您无法下载或出现问题,这里是插件文件:

    PHP 文件 (mod_submenu.php):

    <ul class="menu">
    
        <?php
        defined('_JEXEC') or die;
    
        $m = JFactory::getApplication()->getMenu();
    
        $active = $m->getActive();
        $active_id = isset($active) ? $active->id : $m->getDefault()->id;
        $path   = isset($active) ? $active->tree : array();
    
        $menu = $m->getMenu();
    
        $parentId = $params->get("menuitem");
        foreach($menu as $item){
            if($item->level == 2 && $item->parent_id == $parentId){
                $class = 'item-'.$item->id;
                if ($item->id == $active_id) {
                    $class .= ' current';
                }
                if (in_array($item->id, $path)) {
                    $class .= ' active';
                }
    
                $flink = $item->link;
                if ((strpos($item->link, 'index.php?') === 0) && (strpos($item->link, 'Itemid=') === false)) {
                    $item->flink = $item->link.'&Itemid='.$item->id;
    
                    if (strcasecmp(substr($item->flink, 0, 4), 'http') && (strpos($item->flink, 'index.php?') !== false)) {
                        $item->flink = JRoute::_($item->flink, true, $item->params->get('secure'));
                    }
                    else {
                        $item->flink = JRoute::_($item->flink);
                    }
                }
                echo "<li class='$class'><a href='$item->flink'>$item->title</a></li>";
            }
        }
        ?>
    
    </ul>
    

    XML 文件 (mod_submenu.xml):

    <?xml version="1.0" encoding="utf-8"?>
    <extension type="module" version="2.5.0" client="site" method="install">
    <name>Show Submenu</name>
    <author>Brian</author>
    <creationDate>2012</creationDate>
    <copyright></copyright>
    <license>No license</license>
    <authorEmail>No email</authorEmail> 
    <authorUrl>No website</authorUrl> 
    <version>1.0.0</version> 
    <description>Showing a submenu</description>
    
    <files>
        <filename module="mod_submenu">mod_submenu.php</filename>
        <filename>index.html</filename>
    </files>
    
    <config>
        <fields name="params">
            <fieldset name="basic">
                <field
                name="menuitem"
                type="menuitem"
                label="Choose the menuitem" />
            </fieldset>
        </fields>
    </config>
    </extension>
    

    (请原谅格式,我还是要习惯)

    还有一个空白的 index.html 文件。将它们全部放在一个名为mod_submenu 的文件夹中,压缩、安装并配置它!

    配置:

    结果:

    【讨论】:

    • Brian 干得好,看起来非常有用的模块。值得发布到 JED 吗?
    猜你喜欢
    • 2012-08-03
    • 2012-05-28
    • 2013-09-25
    • 2012-05-18
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多