2

私は 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 を使用して不要な項目を非表示にしようとしましたが、ルート メニュー項目を非表示にすると、サブ メニュー項目を表示できません。

メインメニューに大きなメニュータイプの変更がある場合、それらを2回作成する必要がないため、別のメニューを作成したくありません。

何か案は?

4

2 に答える 2

6

これが私が作ったばかりのモジュールです。選択したメニュー項目からサブメニュー項目をレンダリングします。プラグインのダウンロードはこちら:ダウンロード

ダウンロードできない場合、または何らかの問題がある場合は、プラグイン ファイルを次に示します。

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>

(フォーマットはすみません、まだSOに慣れる必要があります)

そして空の index.html ファイル。mod_submenuzipという名前のフォルダーにすべてを配置し、インストールして構成します。

構成:

プラグインの構成

結果:

サブメニューの結果を表示

于 2012-11-29T09:43:07.410 に答える
0

これは絶対に最善の方法ではないかもしれませんが、当分の間私が考えることができるのはこれだけです.

親メニュー項目 (項目 2) については、タイプを「テキスト区切り」に設定します。これにより、適切なメニュー項目ではなくなり、(テンプレートによっては) テキストがタグで囲まれる可能性が高くなります。

次に、テンプレートに属する CSS ファイルを開き、次のコードを追加します。

span.classname {
    display:none;
}

明らかに、 「classname」を指定されたクラスに変更する必要があります。Chrome Dev Tools または Firebug がこれを支援します。

于 2012-11-28T22:21:18.307 に答える