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 ...
随机推荐
- css--block formatting context
block formatting context(块级格式化上下文) 如何产生BFC:当一个HTML元素满足下面条件的任何一点,都可以产生Block Formatting Context: float ...
- MySQL学习笔记_2_MySQL创建数据表(上)
MySQL创建数据表(上) 一.创建数据表的SQL语句模型[弱类型] CREATETABLE [IF NOT EXISTS] 表名称( 字段名1列的类型[属性][索引], 字段名2 列的类型[属性][ ...
- Android基础之项目结构分析
创建了第一个Android项目,用工具开发Android项目,我们有必要熟悉项目的目录结构,清楚各个项目下面放置的是什么东西.展开整个项目,其根目录结构(选用不同版本的SDK文件目录结构会有一些不同, ...
- Objective-C:Foundation框架-结构体
在Foundation中定义了很多常用结构体类型来简化我们的日常开发,这些结构体完全采用Objective-C定义,和我们自己定义的结构体没有任何区别,之所以由框架为我们提供完全是为了简化我们的开发. ...
- uva 11624(bfs)
11624 - Fire! Time limit: 1.000 seconds Joe works in a maze. Unfortunately, portions of the maze hav ...
- Go语言并发与并行学习笔记(三)
转:http://blog.csdn.net/kjfcpua/article/details/18265475 Go语言并发的设计模式和应用场景 以下设计模式和应用场景来自Google IO上的关于G ...
- [转]C# 应用程序安装部署步骤,安装前操作,先退出程序后卸载。
1. 点击[文件]-[新建]-[项目]-其他项目类型-安装和部署,选择安装项目,在下面的名称栏填写SetupTest(或者选择安装向导,一直点击[下一步])2. 安装项目----六个子项依次为:文件系 ...
- [apache]用shell分析网站的访问情况
随着网站正式运行,我们可以通过通用的免费日志分析工具比如awstats获得一些实际访问网站的信息,例如每天ip量,pv量,用户所用的的浏览器,用户所用的操作系统等,但是有时候希望通过手工方式从WEB日 ...
- PHP Memcached应用实现代码
一.memcached 简介 在很多场合,我们都会听到 memcached 这个名字,但很多同学只是听过,并没有用过或实际了解过,只知道它是一个很不错的东东.这里简单介绍一下,memcached 是高 ...
- Linux 下一个很棒的命令行工具
导读 Taskwarrior 是 Ubuntu/Linux 下一个简单而直接的基于命令行的 TODO 工具.这个开源软件是我曾用过的最简单的基于命令行的工具之一.Taskwarrior 可以帮助你更好 ...