bootstrap菜单完美解决---原创
由于bootstrap的各方优点,偶的“点金项目细化分包管理平台”决定采用它。但在使用中遇到了一些问题,比如菜单的问题,这个菜单是用的一个JQuery的一个效果,点击后,所点击的链接处的class要加active,以标明哪里点击了,高亮表现,并且该链接的上级菜单项也会高亮(如果菜单项仅为一级时,其点击后亦高亮),如果采用iframe的方式,在一个页面中写JQ是能完成的,但会丧失bootstrap自动排版的特性。所以还是要在点击后跳转不同的页面的方式来处理,见过用JS来实现的,这里用PHP实现,先定义一个菜单数组(如果有需求写在数据表里也可以),这个菜单数级分两级,一级为一级菜单项,二级为一级菜单项对应的二级菜单项,通过KEY来标识,二级菜单里的LINK是指的页面中的链接如果点击了之后仍然需求将该二级菜单项及其所在的一级菜单项至为ACTIVE的CLASS。具体见下方的运行效果及代码(此代码未经过优化,只是简单实现,应该还有更好的写法):
<?php function checkstr($beinclude,$uri){
$tmparray = explode($uri,$beinclude);
if(count($tmparray)>1){
return true;
} else{
return false;
}
} function outputmenu($uri,$useremail)
{
$data = array(
'1' =>array('name'=>'看板 Dashboard','icon'=>'iconfa-laptop','url'=>'dashboard'),
'2' =>array('name'=>'全站项目','icon'=>'iconfa-book','url'=>''),
'3' =>array('name'=>'我的项目 Site Project','icon'=>'iconfa-pencil"','url' =>''),
'4'=>array('name'=>'我的接单 All Project','icon'=>'iconfa-briefcase','url' => ''),
'5'=>array('name'=>'我的管理 Request','icon'=>'iconfa-user','url'=>''),
'6'=>array('name'=>'站内服务','icon'=>'iconfa-th-list','url'=>''),
'7'=>array('name'=>'需知及帮助','icon'=>'iconfa-envelope','url'=>''),
'8'=>array('name'=>'Admin 管理入口','icon'=>'iconfa-wrench','url'=>''),
); $menulst = array(
'1'=>array(array('name'=>'','icon'=>'','url'=>''),),
'2'=>array(
array('name'=>'项目总览 All Projects','icon'=>'','url'=>'project',
'link'=>array('project/detail','modules/modlst','','')),//link为打开页面中的链接
array('name'=>'最新需求列表 Request','icon'=>'','url'=>'request',
'link'=>array('request/viewdetail','request/reqinitlst')),
array('name'=>'总体设计招揽','icon'=>'','url'=>'222','link'=>array()),
array('name'=>'详细设计招揽','icon'=>'','url'=>'333','link'=>array()),
array('name'=>'开发招揽','icon'=>'','url'=>'444','link'=>array()),
array('name'=>'测试招揽','icon'=>'','url'=>'555','link'=>array()),
array('name'=>'排名榜单','icon'=>'','url'=>'666','link'=>array()),
),
.....................................//自己定义
'8'=>array(
array('name'=>'项目维护 Maintenance','icon'=>'','url'=>'','link'=>array()),
array('name'=>'发包方合同管理 Contracts','icon'=>'','url'=>'','link'=>array()),
), );
foreach ($data as $key => $row)
{
if ($useremail != 'admin' AND $key == '8' )
break;//如果用户名不为admin并且循环至第8个主导航链接时直接退出 //当一级菜单项下有子菜单项时
if ($row['url'] == "")
{
//做一次循环,如果二级菜单的链接被点击,就打在一级菜单上active和display标志
$flag1 = 0;
foreach ($menulst[$key] as $i=>$val)
{
//当二级菜单项中的URL和当前点击的一致时
if (strcmp($val['url'],$uri) == 0)
{
$flag1 = 1;
break;
}
} //再做一次循环,如果二级链接的页面中的链接被点击,即和URI相同时,做标记
$flag2 = 0;
foreach ($menulst[$key] as $i=>$val)
{
$arrlength=count($val['link']);
for($x = 0; $x < $arrlength; $x++)
{
//echo stripos($uri,$val['link'][$x])."<br/>";
if (stripos($uri,$val['link'][$x]) !== false)
{
$flag2 = 1;
break;
}
}
} if ($flag1 == 1 || $flag2 == 1)
{
echo "<li class=\"dropdown active\"><a href=\"\"><span class=\"".$row['icon']."\"></span>".$row['name']."</a>";
echo "<ul style=\"display: block\">";
}
else
{
echo "<li class=\"dropdown\"><a href=\"\"><span class=\"".$row['icon']."\"></span>".$row['name']."</a>";
echo "<ul>";
} foreach ($menulst[$key] as $i=>$val)
{
//如果二级页面中链接包含在URI中,就将其二级链接中加Active
$flag3 = 0;
$arrlength = count($val['link']);
for($x = 0; $x < $arrlength; $x++)
{
//echo stripos($uri,$val['link'][$x])."<br/>";
if (stripos($uri,$val['link'][$x]) !== false)
{
$flag3 = 1;
break;
}
} if (strcmp($val['url'],$uri) == 0 || $flag3 == 1 )
{
echo "<li class='active'><a href=\"".base_url()."index.php/".$val['url']."\">".$val['name']."</a></li>";
}
else
{
/* //如果传值中包含点击的二级页面链接时
$arrlength=count($val['link']);
$flag3 = 0;
for($x = 0;$x < $arrlength; $x++)
{
if (strpos($val['link'][$x],$uri) == 0 )
{
//echo "<li class='active'><a href=\"".base_url()."index.php/".$val['url']."\">".$val['name']."</a></li>";
$flag3 = 1;
//echo "val:".$val['link'][$x]."<br/>";
//echo "uri:".$uri."<br/>";
break;
}
} */
//if ($flag3 == 0)
echo "<li><a href=\"".base_url()."index.php/".$val['url']."\">".$val['name']."</a></li>";
}
}
echo "</ul></li>";
}
else
{
//当有且仅有一级菜单项时,比对链接和传值
if (strcmp($row['url'],$uri) == 0)
{
echo "<li class=\"active\"><a href=\"".base_url()."index.php/".$row['url']."\"><span class=\"".$row['icon']."\"></span>".$row['name']."</a></li>";
}
else
{
echo "<li><a href=\"".base_url()."index.php/".$row['url']."\"><span class=\"".$row['icon']."\"></span>".$row['name']."</a></li>";
}
}
//echo "<br/>".$row['url']."<br/>"; }//foreachEnd /*
* 做循环输出,根据传入的$url给第一级array加active和其本身加active的class
*/
// $json_str=json_encode($tmparr); // foreach($data as $key=>$value)
// {
// $i = 1;
// foreach($value as $key1=>$value1)
// {
// //如果为第一级且仅有一级
// if (count($value) == 1)
// {
// if (strpos($value1,$uri))
// {
// echo "<li><a href=\"".base_url()."index.php/".$value1."\"><span class=\"iconfa-laptop\"></span>".$key1."</a></li>";
// }
// else
// {
// echo "<li class=\"active\"><a href=\"".base_url()."index.php/".$value1."\"><span class=\"iconfa-laptop\"></span>".$key1."</a></li>";
// }
// }
// else//如果为多级时
// {
// if ($i == 1)
// echo "<li class=\"dropdown \" id=\"allsiteproject\"><a href=\"\"><span class=\"iconfa-book\"></span>".$key1."</a><ul style=\"\">";
// }
// $i++;
// }
// } }
bootstrap菜单完美解决---原创的更多相关文章
- 完美解决bootstrap模态框允许拖动后拖出边界的问题
使用bootstrap3版本 在网上看了很多方法,我觉得jquery-ui的实现方法是最简单有效的,具体实现方法 1.下载并引入jquery-ui插件 2.全局添加模态框允许拖动事件 $(docume ...
- 【原创】java 获取十个工作日之前或之后的日期(算当天)-完美解决-费元星
[原创]java 获取十个工作日之后的日期(算当天)-完美解决-费元星(仅考虑星期六星期天) /** * * 根据开始日期 ,需要的工作日天数 ,计算工作截止日期,并返回截止日期 * @param s ...
- Installshield更新时,新加dll未拷贝至安装目录问题完美解决【原创】
最近在发现在开发过程中新增的目录或文件(特别是dll\ocx\exe等二进制文件),在升级安装时拷贝失败. 经过一周的研究,完美解决办法: 对于新增的文件或目录,放到一个新的component中,并且 ...
- VC++ 实现VC程序启动时最小化到任务栏(完美解决闪烁问题)
之前写的一个VC应用程序,是程序启动时就直接出现在任务栏, 窗体不出现,等用户点击任务栏图标再出现窗口.和一些防火墙什么的软件类似. 这种效果实现并不是很困难的,硬是找不到最好的.为什么呢? 首先,在 ...
- HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
这篇文章主要介绍了HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法,需要的朋友可以参考下 HTML5的语义化标签以及属性,可以让开发者非常方便地实现清晰的web页面 ...
- 2017-04-26 ios ipv6那些事(已完美解决)
2017-04-26 ios ipv6那些事(已完美解决) 工作单位性质属于外包公司,每天都有几十的app要提交上传至应用市场,于2017年3月份接到ios工程师反馈 Guideline 2.1 ...
- 完美解决 开机无法启动 提示0xc000000e
注:昨天装系统碰到这个问题,这个方法说的较详细,我的是WIN7系统,开机提示引导文件错误,代码为0xc000000e 无法进入系统,使用PE进入后,在运行里输入CMD,然后按下文红字开始操作 完美解决 ...
- 76. Spring Boot完美解决(406)Could not find acceptable representation原因及解决方法
[原创文章] 使用Spring Boot的Web项目,处理/login请求的控制器方法(该方法会返回JSON格式的数据).此时如果访问localhost:8080/login.html, ...
- [Linux实践] macOS平台Homebrew更新brew update卡死,完美解决
[Linux实践] macOS 平台 Homebrew 更新 brew update 卡死,完美解决 版本2020.01.05 摘要: 使用brew install [软件包]安装软件包时,卡在Upd ...
随机推荐
- tar.xz如何解压:linux和windows下tar.xz解压命令介绍
在linux下怎么解压和压缩tar.xz文件? (本文由www.169it.com搜集整理) 在linux下解压tar.xz文件步骤 1 2 # xz -d ***.tar.xz //先解压xz # ...
- C语言链表
#include<stdio.h>#include<malloc.h>#include<stdlib.h> typedef struct Node{ int dat ...
- Android基础之项目结构分析
创建了第一个Android项目,用工具开发Android项目,我们有必要熟悉项目的目录结构,清楚各个项目下面放置的是什么东西.展开整个项目,其根目录结构(选用不同版本的SDK文件目录结构会有一些不同, ...
- JAVA-数据库连接【转】
SqlServer.Oracle.MySQL的连接,除了地址和驱动包不同,其他都一样的. 1 public String urlString="jdbc:sqlserver://localh ...
- 嵌套 click 第二层 click会叠加 导致 触发 多次
$("#appearHiddenDiv").click(function(){ $("#hiddenDiv").css({display:"block ...
- 国内HTML5前端开发框架汇总
国内HTML5前端开发框架汇总 Dawei Cheng 程大伟... 于 星期日, 02/12/2012 - 20:53 提交 国外很有多优秀的HTML5前端开发框架相信大家都耳熟能详:JQuery ...
- PowerMock.expectNew(Class<T> type, Class<?>[] parameterTypes, Object... arguments)
1:PowerMock.expectNew(Class<T> type, Class<?>[] parameterTypes, Object... arguments) 如果你 ...
- 开源性能测试工具--Jmeter介绍+安装
一. Apache JMeter介绍 1. Apache JMeter是什么Apache JMeter 是Apache组织的开放源代码项目,是一个100%纯Java桌 ...
- 在Linux中查看文件的编码及对文件进行编码转换
如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8.下面介绍一下,在Li ...
- C++-const_cast只能用于指针和引用,对象的const到非const可以用static_cast
Static_cast可以对对象也可以对指针也可以对引用,但是const_cast只可以对指针和引用使用,后者不可以对对象用,如果你要把一个const值转化为非const值只能用隐式执行或通过使用st ...