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 ...
随机推荐
- cf(#div1 B. Dreamoon and Sets)(数论)
B. Dreamoon and Sets time limit per test 1 second memory limit per test 256 megabytes input standard ...
- hdu------(3549)Flow Problem(最大流(水体))
Flow Problem Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- nyoj-----127星际之门(一)
星际之门(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 公元3000年,子虚帝国统领着N个星系,原先它们是靠近光束飞船来进行旅行的,近来,X博士发明了星际之门 ...
- android:exported
这个属性用于指示该服务是否能够被其他应用程序组件调用或跟它交互.如果设置为true,则能够被调用或交互,否则不能.设置为false时,只有同一个应用程序的组件或带有相同用户ID的应用程序才能启动或绑定 ...
- java.lang.IllegalArgumentException: addChild: Child name '/SSHE' is not unique
错误信息: Caused by: java.lang.IllegalArgumentException: addChild: Child name '/SSHE' is not unique ...
- MASS批量维护
T-CODE: MASS 批量更改MASS_CHARVAL 特征的批量维护MASS_EINE 信息记录的成批维护MASS_EKKO 采购订单的成批维护MASS_MARC 后勤/配送的成批维护MASS_ ...
- ASP.NET Web API中的依赖注入
什么是依赖注入 依赖,就是一个对象需要的另一个对象,比如说,这是我们通常定义的一个用来处理数据访问的存储,让我们用一个例子来解释,首先,定义一个领域模型如下: namespace Pattern.DI ...
- 权威第三方报告——获取IT产品竞争力信息的主要途径,类似你买电脑前上的xx论坛看实力评估
Gartner is known for its huge influence on purchasing as well as an unequaled events business. Forre ...
- struts2 拦截器 interceptor
struts2 拦截器详解:http://struts2.group.iteye.com/group/wiki/1397-deep-into-struts2-interceptors
- 重点关注之自定义序列化方式(Protobuf和Msgpack)
除了默认的JSON和XML序列化器外,如果想使用其它格式的(比如二进制)序列化器,也是可以的.比如著名的Protobuf和Msgpack,它们都是二进制的序列化器,特点是速度快,体积小.使用方法如下. ...