我目前正在尝试覆盖joomla菜单,使其看起来像:
项目|项目|项目| item LOGO 项目|项目| item | item
所以基本上我试图把菜单分成两半<ul>
我得到的是工作但不幸的是我神奇地把它打破了......
这是菜单的未经编辑的代码:
<?php
/**
* @package Joomla.Site
* @subpackage mod_menu
*
* @copyright Copyright (C) 2005 - 2013 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
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">';
}
// 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>
这是我编辑的代码,直到现在才开始工作:
<?php
/**
* @package Joomla.Site
* @subpackage mod_menu
*
* @copyright Copyright (C) 2005 - 2013 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. ?>
<?php if($class_sfx == " menu-logo"): ?>
<ul class="nav menu<?php echo $class_sfx;?> span4 pull-left menu-left"<?php
$tag = '';
if ($params->get('tag_id') != null)
{
$tag = $params->get('tag_id').'';
echo ' id="'.$tag.'"';
}
endif;
?>
<?php if($class_sfx != " menu-logo"): ?>
<ul class="nav menu<?php echo $class_sfx;?>"<?php
$tag = '';
if ($params->get('tag_id') != null)
{
$tag = $params->get('tag_id').'';
echo ' id="'.$tag.'"';
}
endif;
?>>
<?php
$counter = 0;
foreach ($list as $i => &$item) :
$class = 'item-'.$item->id;
if($item->params->get('menu-anchor_css') == "dropdown-toggle") {
$class = 'dropdown item-'.$item->id;
} else {
$class = 'item-'.$item->id;
}
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 .= 'dropdown-menu deeper';
}
if ($item->parent)
{
$class .= ' parent dropdown';
}
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 dropdown-menu">';
}
// 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 {
$counter++;
echo '</li>';
if($counter == 4 && $class_sfx == " menu-logo"){
echo "</ul>";
echo "<div class='logo span4 hidden-phone'><img src='".JURI::base( true )."logo.png' /></div>";
echo "<ul class='nav menu menu-right pull-right'>";
}
}
endforeach;
?></ul>
<div class='clearfix'></div>
抱歉,我知道它有很多代码,但是真的不能理解......任何帮助都非常感激。
请不要我使用基于我提出的解决方案的解决方案..我刚刚为我提供的方法做了很多CSS以便立即恢复...
答案 0 :(得分:1)
你最好使用Joomla选项来实现这一目标,然后你不需要测试$ counter。在菜单管理器中,编辑菜单项,然后在链接类型选项中选择并添加链接图像。然后在每个循环的代码中:
$spanImg ='';
if ($item->menu_image) {
$spanImg = '<div class="logo span4 hidden-phone"><img src="'.$item->menu_image.'" /></div>';
}
...
// The next item is deeper.
if ($item->deeper)
{
echo '<ul class="nav-child dropdown-menu">';
}
...
// The next item is on the same level.
else {
echo $spanImg.'</li>';
}
否则,当你调用default_url.php时,你可以在这个文件中找到这段代码,它也可以工作。
答案 1 :(得分:0)
使用$item->level
而不是使用$counter
计算所有内容,只计算级别低于2的项目。请参阅下面的代码:
<?php
/**
* @package Joomla.Site
* @subpackage mod_menu
*
* @copyright Copyright (C) 2005 - 2013 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. ?>
<?php if($class_sfx == " menu-logo"): ?>
<ul class="nav menu<?php echo $class_sfx;?> span4 pull-left menu-left"<?php
$tag = '';
if ($params->get('tag_id') != null)
{
$tag = $params->get('tag_id').'';
echo ' id="'.$tag.'"';
}
endif;
?>
<?php if($class_sfx != " menu-logo"): ?>
<ul class="nav menu<?php echo $class_sfx;?>"<?php
$tag = '';
if ($params->get('tag_id') != null)
{
$tag = $params->get('tag_id').'';
echo ' id="'.$tag.'"';
}
endif;
?>>
<?php
foreach ($list as $i => &$item) :
if($item->level < 2):
$counter += count($item);
endif;
$class = 'item-'.$item->id;
if($item->params->get('menu-anchor_css') == "dropdown-toggle") {
$class = 'dropdown item-'.$item->id;
} else {
$class = 'item-'.$item->id;
}
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 .= 'dropdown-menu deeper';
}
if ($item->parent)
{
$class .= ' parent dropdown';
}
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 dropdown-menu">';
}
// 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>';
}
if($counter == 4 && $class_sfx == " menu-logo"){
echo "</ul>";
echo "<div class='logo span4 hidden-phone'><img src='".JURI::base( true )."logo.png' /></div>";
echo "<ul class='nav menu menu-right pull-right'>";
}
endforeach;
?></ul>
<div class='clearfix'></div>