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 ...
随机推荐
- DSP EPWM学习笔记1 - EPWM定时中断
DSP EPWM学习笔记1 - EPWM定时中断 彭会锋 EPWM模块组成 EPWM有7个子模块组成:时间基准 TB.比较功能 CC.动作限定 AQ.死区产生 DB.斩波控制 PC.故障捕获 TZ.事 ...
- 笔记2:傻瓜式盗QQ程序
1.一个简单的盗QQ号的方法 仿做一个QQ的窗体 PS:当然里面有用的控件只有两个输入框和一个登陆按钮,其他的尽量做得像一些吧! 点登陆时的后台代码: PS:需要导入两个包:using System. ...
- java作业——整数相加
设计思路:由于命令行参数都是字符串,所以解决问题的关键在于字符串和整数之间的转化.首先定义数组,让所要相加的数组成一个数组,然后实现数组的字符串转化为整数,最后相加输出就行了. 程序流程图: 源代码: ...
- easyui numberbox不可编辑
今天又遇到了给easyui中numberbox设置不可编辑的功能,在(http://www.jeasyuicn.com/api/docTtml/index.htm)API中找到了一个方法:
- 如何实现301的跳转?当输入域名http://xxx.com的时候自动重定向到www上去
答案:在服务器上操作,注意勾选和不勾选的区别,使用Fiddle进行观察,301和302之间的区别
- Tomcat6.0总是运行不了 总是出现Unable to open the service 'Tomcat6'
如果配置没有问题的话,如果你是win7系统,在开始菜单运行Tomcat,运行提示"Unable to open the service ‘tomcat6’"的话,应该是win7的安 ...
- java面向对象编程——第五章 对象的行为
5.1 方法调用栈 当一个方法被调用时,将导致控制流程跳转到被调用的方法.然后,控制流程执行方法中的语句.当然,被执行的方法可能会调用其它方法,导致控制流程跳转到其它方法.所有的方法调用都维护在一个称 ...
- android应用程序如何调用支付宝接口(转)
最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在 ...
- Js练习题之字数判断
目标:控制某个栏目里每行字数,当字数超出时,以省略号显示 $("元素").each(function(){ var maxlength=9; //最大字数 if($(this).t ...
- (转载)全球唯一标识GUID
GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值. GUID ...