<?php
/**
* @package Joomla.Site
* @subpackage mod_menu
*
* @copyright Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
// Note. It is important to remove spaces between elements.
?>
<?php // The menu class is deprecated. Use nav instead. ?>
<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
$num = 1;
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 lvl_'.($num++).'>';
}
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>
これはここで重要なコードです。
{
echo '<ul class="nav-child unstyled small lvl_'.($num++).'>';
}
問題は、私のサイトを初期化すると、すべてのサブメニューレイヤーにプラス1が追加されますが、レイヤーが親に最も近いときに最初からやり直さないことです。
例これは私が欲しいものです
<ul class="lvl_1">
<li>
<ul class="lvl_2">
</ul>
</li>
</ul>
<ul class="lvl_1">
<li>
<ul class="lvl_2">
</ul>
</li>
</ul>
これは私が得るものです
<ul class="lvl_1">
<li>
<ul class="lvl_2">
</ul>
</li>
</ul>
<ul class="lvl_3">
<li>
<ul class="lvl_4">
</ul>
</li>
</ul>
これはおそらく修正が非常に簡単です。
$ numを使用してインクリメントする代わりに、$ item-> levelに置き換えます。
echo '<ul class="nav-child unstyled small lvl_'.$item->level.'">';
注:コードには、クラス属性の終了二重引用符もありませんでした。
これは、私が過去のjoomla 2.5サイトで行ったメニューモジュールのオーバーライドからのもので、同じ要件を扱っています。ここに、当時のローカル開発バージョンに存在していたdefault.phpファイルの初期バージョンのコードを貼り付けます。最終バージョンのコードを後でさらに修正または改善した可能性がありますが、そのコードにアクセスして、ここに貼り付けることはできません。慎重に使用するか、問題を報告してください。投稿をここで編集します。
アイテム(li)レベルと共に、サブulにもクラスを割り当てます。
<?php
/**
* @package Joomla.Site
* @subpackage mod_menu
* @copyright Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
// No direct access.
defined('_JEXEC') or die;
// Note. It is important to remove spaces between elements.
?>
<ul class="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->deeper) {
$class .= ' deeper';
}
if ($item->level == 1) {
$class .= ' items-level1';
}
if ($item->level == 2) {
$class .= ' items-level2';
}
if ($item->level == 3) {
$class .= ' items-level3';
}
if ($item->level == 4) {
$class .= ' items-level4';
}
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':
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'; if($item->level == 1) {echo " class='first-subs'";} if($item->level == 2) {echo " class='second-subs'";}if($item->level == 3) {echo " class='third-subs'";}
echo '>';
}
// The next item is shallower.
elseif ($item->shallower) {
echo '</li>';
echo str_repeat('</ul></li>', $item->level_diff);
}
// The next item is on the same level.
else {
echo '</li>';
}
endforeach;
?></ul>