为首页导航菜单栏增加下拉子菜单
[i=s] 本帖最后由 trashgod 于 2009-4-15 16:37 编辑 [/i]为首页导航菜单栏增加下拉子菜单,暂时只做了一级子菜单,其实可以做很多级。
先贴效果图,再贴代码,给大家分享一下。
同时实现了product产品类型频道的子类别,这是个特殊的频道,官方是没有列出子类别来的。
[color=#FF0000][b]大家注意,我把修改过的模板文件全部打包放在附件了,可以直接下载回去玩。[/b][/color] 对了,是纯CSS制作的,频道管理在后台修改就行,程序自动生成导航栏 [s:3] [i=s] 本帖最后由 ysuny 于 2009-2-5 16:47 编辑 [/i]
首页增加导航菜单的下拉子菜单
修改模板下面的index.php文件,首先在头部的meta部分导入下拉菜单用到的css js文件,这两个文件单独提供。
<style type="text/css">
<!--
@import"./inc/js/nav-h.css";
-->
</style>
<!--[if gte IE 5.5]>
<script language="JavaScript" src="./inc/js/nav-h.js" type="text/JavaScript"></script>
<![endif]-->
#######################################################################
然后找到<div id="nav">这个块,修改php代码如下:
<div id="nav">
<ul id="navmenu-h">
<li><a href="<?php echo get_root_path() ?>"><span>首页</span></a></li>
<?php
global $db,$params,$request; //自己生成导航下拉菜单
$menuRoot = $db->get_results("select * from ".TB_PREFIX."menu where deep=0 [color=#ff0000]and isHidden=0 [/color]order by ordering asc"); //生成所有菜单根节点数组,按deep
parentid获取
if(!empty($menuRoot)){
foreach($menuRoot as $o)
{
echo '<li><a href="./?p='.$o->id.'"><span>'.$o->title.'</span></a>';
if($o->type=="product"){//产品频道特殊,子分类在不同的表格查找
$submenuRoot=$db->get_results("select * from ".TB_PREFIX."product_category where channelId =".$o->id." and deep=0 order by
ordering asc"); //获取产品子栏目节点
if(!empty($submenuRoot)){
echo '<ul>';
foreach($submenuRoot as $osub)
{
echo '<li><a href="./?p='.$o->id.'&c='.$osub->id.'">'.$osub->title.'</a></li>';
}
echo '</ul>';
}//有产品子节点内容
}else{
$submenuRoot=$db->get_results("select * from ".TB_PREFIX."menu where parentid=".$o->id." [color=#ff0000]and isHidden=0[/color] order by ordering asc"); //获取子栏目
节点
if(!empty($submenuRoot)){
echo '<ul>';
foreach($submenuRoot as $osub)
{
echo '<li><a href="./?p='.$osub->id.'">'.$osub->title.'</a></li>';
}
echo '</ul>';
}//有子节点内容
}
echo '</li>';
}
}//有可输出内容
?>
</ul>
</div>
#######################################################################
nav-h.css 样式表,可以自己根据需要改一改,目前只用到了两层菜单,还比较简单的。nav-h.js就照搬不需要动。
/* Root = Horizontal, Secondary = Vertical */
ul#navmenu-h {
border: 0 none;
padding: 0;
width: 812px; /*For KHTML 导航菜单宽度,可以根据需要改一下*/
list-style: none;
height: 32px;
float:left;
margin:0;
display:inline;
}
ul#navmenu-h li {
margin: 0;
border: 0 none;
padding: 0;
float: left; /*For Gecko*/
display: inline;
list-style: none;
position: relative;
height: 24px;
margin-right:5px;
}
ul#navmenu-h ul {
margin: 0;
border: 0 none;
padding: 0;
width: 160px;
list-style: none;
display: none;
position: absolute;
top: 32px;
left: 0;
}
ul#navmenu-h ul:after /*From IE 7 lack of compliance*/{
clear: both;
display: block;
font: 1px/0px serif;
content: ".";
height: 0;
visibility: hidden;
}
ul#navmenu-h ul li {
width: 160px;
float: left; /*For IE 7 lack of compliance*/
display: block !important;
display: inline; /*For IE*/
}
/* Root Menu 主菜单的链接样式,可以使用不同的背景图,hover动作有个切换效果帅一些*/
ul#navmenu-h a {
height:32px; float:left; padding:0 0 0 10px; background:url(navbgl.jpg) no-repeat left top; color:#333; text-decoration:none; line-height:14px; letter-
spacing:1px;
}
ul#navmenu-h a span{
float:left; display:block; background:url(navbgr.jpg) no-repeat right top; padding:10px 20px 8px 10px; color:#fff; text-align:center;
}
/* Commented Backslash Hack hides rule from IE5-Mac \*/
ul#navmenu-h a span{float:none;}
/* End IE5-Mac hack */
ul#navmenu-h a:hover span{ color:#666;}
ul#navmenu-h a:hover{ background-position:0% -32px;}
ul#navmenu-h a:hover span { background-position:100% -32px;}
ul#navmenu-h li:hover span{ color:#666;}
ul#navmenu-h li:hover a{ background-position:0% -32px;}
ul#navmenu-h li:hover span{ background-position:100% -32px;}
ul#navmenu-h li.iehover span{ color:#666;}
ul#navmenu-h li.iehover a{ background-position:0% -32px;}
ul#navmenu-h li.iehover span{ background-position:100% -32px;}
/* Root Menu Hover Persistence */
ul#navmenu-h a:hover,
ul#navmenu-h li:hover a,
ul#navmenu-h li.iehover a {
/*background: #CCC;*/
/*color: #FFF;*/
}
/* 2nd Menu 子菜单的样式,可以改改颜色 字体 边框色,能搭配出不错的效果*/
ul#navmenu-h ul a {
border: 1px solid #FFF;
border-right-color: #CCC;
border-bottom-color: #CCC;
padding: 0 6px;
float: none !important; /*For Opera*/
float: left; /*For IE*/
display: block;
background: #EEE;
color: #CCC;
font: 12px/22px Verdana, Arial, Helvetica, sans-serif;
text-decoration: none;
height: auto !important;
height: 1%; /*For IE*/
}
ul#navmenu-h li:hover li a,
ul#navmenu-h li.iehover li a {
float: none;
background: #EEE;
color: #666;
}
/* 2nd Menu Hover Persistence 子菜单的保持效果,也就是鼠标到下一级子菜单时,这个保持什么效果*/
ul#navmenu-h li:hover li a:hover,
ul#navmenu-h li:hover li:hover a,
ul#navmenu-h li.iehover li a:hover,
ul#navmenu-h li.iehover li.iehover a {
background: #CCC;
color: #FFF;
}
/* 3rd Menu */
ul#navmenu-h li:hover li:hover li a,
ul#navmenu-h li.iehover li.iehover li a {
background: #EEE;
color: #666;
}
/* 3rd Menu Hover Persistence */
ul#navmenu-h li:hover li:hover li a:hover,
ul#navmenu-h li:hover li:hover li:hover a,
ul#navmenu-h li.iehover li.iehover li a:hover,
ul#navmenu-h li.iehover li.iehover li.iehover a {
background: #CCC;
color: #FFF;
}
/* 4th Menu */
ul#navmenu-h li:hover li:hover li:hover li a,
ul#navmenu-h li.iehover li.iehover li.iehover li a {
background: #EEE;
color: #666;
}
/* 4th Menu Hover */
ul#navmenu-h li:hover li:hover li:hover li a:hover,
ul#navmenu-h li.iehover li.iehover li.iehover li a:hover {
background: #CCC;
color: #FFF;
}
ul#navmenu-h ul ul,
ul#navmenu-h ul ul ul {
display: none;
position: absolute;
top: 0;
left: 160px;
}
/* Do Not Move - Must Come Before display:block for Gecko */
ul#navmenu-h li:hover ul ul,
ul#navmenu-h li:hover ul ul ul,
ul#navmenu-h li.iehover ul ul,
ul#navmenu-h li.iehover ul ul ul {
display: none;
}
ul#navmenu-h li:hover ul,
ul#navmenu-h ul li:hover ul,
ul#navmenu-h ul ul li:hover ul,
ul#navmenu-h li.iehover ul,
ul#navmenu-h ul li.iehover ul,
ul#navmenu-h ul ul li.iehover ul {
display: block;
} 也不能叫纯CSS,但是那个JS不用管,不需要用户去看他的代码。只写自己的<ul><li>列表就行了 哈哈。感谢楼主的慷慨,说的真详细 楼主真是个好人,支持了! 一上来就看到好东西,支持楼主 论坛里的文字直接复制每句会加很多乱码,很不方便! ls的兄弟,直接复制到写字板应该还好吧?需要源码的话可以给你 这么慷慨?连模板一起发给我吧,学习一下 [s:1141]
我的邮箱[email]xiaobing4947@163.com[/email],呵呵得寸进尺了 [quote]引用第9楼win0niw于2008-09-03 16:37发表的 :
这么慷慨?连模板一起发给我吧,学习一下 [s:1141]
我的邮箱[email]xiaobing4947@163.com[/email],呵呵得寸进尺了[/quote]
回楼上的。这个模板在模板发布区有下载啊
看这个帖子:http://www.deepthroat.com.cn/bbs/read.php?tid=6095 [quote]引用第10楼shuanger于2008-09-03 17:09发表的 :
回楼上的。这个模板在模板发布区有下载啊
看这个帖子:[url]http://www.deepthroat.com.cn/bbs/read.php?tid=6095[/url][/quote]
[attach]101[/attach] [attach]102[/attach]
这两点就和模板发布区的有很大区别啊,虽然看上去差不多。。。关注楼主这个网站
另外看到楼主发的另外个帖子讲产品子栏目了,高手! 噢,原来你是想要楼主加过子菜单后的模板啊,呵呵,理解错误了! [s:202] [quote]引用第11楼win0niw于2008-09-03 18:09发表的 :
[attach]748[/attach] [attach]749[/attach]
这两点就和模板发布区的有很大区别啊,虽然看上去差不多。。。关注楼主这个网站
另外看到楼主发的另外个帖子讲产品子栏目了,高手![/quote]
我就把修改过的目录和模板发给你,压缩了不到2MB,你自己覆盖过去,或者参考一下 哈哈,谢谢了,我去看看 [attach]94[/attach]
导航菜单弄好了
[attach]95[/attach]
整体效果 楼上改的效果很好嘛,不过还是要感谢楼主的奉献精神才能让更多的用户受益。2个人都加分奖励! [quote]引用第15楼win0niw于2008-09-04 11:53发表的 :
[attach]760[/attach]
导航菜单弄好了
[attach]761[/attach]
整体效果[/quote]
恭喜恭喜,看来你还是有点代码功底的,改得没一点问题。
那个导航切换的绿色背景图片要是觉得不协调,可以换换颜色 楼主,有一个很大的问题,希望抽时间改进,就是下拉菜单那一项,现在的现象是这样:比如我们把某个频道在后台隐藏了,但目前用这个下拉菜单效果后,会把原本隐藏的频道或栏目还是会在前台显示出来了. [quote]引用第18楼kdeey于2008-09-07 15:19发表的 :
楼主,有一个很大的问题,希望抽时间改进,就是下拉菜单那一项,现在的现象是这样:比如我们把某个频道在后台隐藏了,但目前用这个下拉菜单效果后,会把原本隐藏的频道或栏目还是会在前台显示出来了.[/quote]
谢谢,之前我也注意到这个问题了,只是自己还没用到隐藏频道,所以偷懒了。我改一下数据库查询语句就行了,红色标出的地方加了and isHidden=0
//######################################
global $db,$params,$request; //自己生成导航下拉菜单
$menuRoot = $db->get_results("select * from ".TB_PREFIX."menu where deep=0 [color=#FF0000]and isHidden=0 [/color]order by ordering asc"); //生成所有菜单根节点数组,按deep
parentid获取
if(!empty($menuRoot)){
foreach($menuRoot as $o)
{
echo '<li><a href="./?p='.$o->id.'"><span>'.$o->title.'</span></a>';
if($o->type=="product"){//产品频道特殊,子分类在不同的表格查找
$submenuRoot=$db->get_results("select * from ".TB_PREFIX."product_category where channelId =".$o->id." and deep=0 order by
ordering asc"); //获取产品子栏目节点
if(!empty($submenuRoot)){
echo '<ul>';
foreach($submenuRoot as $osub)
{
echo '<li><a href="./?p='.$o->id.'&c='.$osub->id.'">'.$osub->title.'</a></li>';
}
echo '</ul>';
}//有产品子节点内容
}else{
$submenuRoot=$db->get_results("select * from ".TB_PREFIX."menu where parentid=".$o->id." [color=#FF0000]and isHidden=0[/color] order by ordering asc"); //获取子栏目
节点 楼主,还有一个问题,不知是我这边程序的原因,还是...
我现在用了下拉菜单后,发现在IE6.0能显示正常,在IE7.0就不正常了.
在IE6.0与7.0的区别图片
ie6.0[attach]89[/attach]
ie7.0 [attach]90[/attach] [quote]引用第20楼kdeey于2008-09-08 23:07发表的 :
楼主,还有一个问题,不知是我这边程序的原因,还是...
我现在用了下拉菜单后,发现在IE6.0能显示正常,在IE7.0就不正常了.
在IE6.0与7.0的区别图片
ie6.0[attach]813[/attach]
.......[/quote]
看起来菜单还是排列整齐的,相对位置和切换效果也没有问题。
应该是你的导航栏外层DIV的CSS属性问题,对齐或者空白写的不对。
这个导航代码通用性还是很好的,你方便的话把网址发过来我们帮你看看 好东西就要顶!!! [s:98] [quote]引用第21楼trashgod于2008-09-09 10:01发表的 :
看起来菜单还是排列整齐的,相对位置和切换效果也没有问题。
应该是你的导航栏外层DIV的CSS属性问题,对齐或者空白写的不对。
这个导航代码通用性还是很好的,你方便的话把网址发过来我们帮你看看[/quote]
我是在本地上测试的,还没有虚似主机空间.我加你QQ,到时你在线时帮我看看.
