我有以下代码,并试图弄清楚如何向PHP命令添加一个或多个情境。例如下面我希望有更多的一个页面名称(即:advertising.php)将触发事件添加在顶部的PHP中指定的活动类。
<?php
function active($currect_page){
$url_array = explode('/', $_SERVER['REQUEST_URI']) ;
$url = end($url_array);
if($currect_page == $url){
echo 'active'; //class name in css
}
}
?>
<div class="row"><!--BEGIN NAV ROW-->
<div class="container">
<nav class="navbar navbar-default" role="navigation">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#collapse">
<span class="sr-only">Toggle Navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="index.php"><img src="images/site-logo.png" alt="Briley Design Group" /></a>
</div>
<div class="collapse navbar-collapse" id="collapse">
<ul class="nav navbar-nav navbar-right list-hover-slide">
<li class="<?php active('index.php');?>"><a href="index.php">HOME</a></li>
<li class="<?php active('advertising.php');?> dropdown "><a href="#" class="dropdown-toggle" data-toggle="dropdown">PORTFOLIO</a>
<ul class="dropdown-menu">
<li><a href="advertising.php">Advertising</a></li>
<li><a href="annual.php">Annual Reports</a></li>
<li><a href="brochures.html">Brochures</a></li>
<li><a href="cards.html">Cards/Promo</a></li>
<li><a href="interactive.html">Interactive</a></li>
<li><a href="logos.html">Logos</a></li>
<li><a href="display.html">Display Graphics</a></li>
<li><a href="photography.html">Photography</a></li>
</ul>
</li>
<li class="<?php active('about.php');?> dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">ABOUT US</a>
<ul class="dropdown-menu">
<li><a href="about.php">About Our Company</a></li>
<li><a href="clients.html">What Our Clients Say</a></li>
</ul>
</li>
<li class="<?php active('how.php');?>"><a href="how.html">HOW WE WORK</a></li>
<li class="<?php active('contact.php');?>"><a href="contact.html">CONTACT</a></li>
</ul>
</div>
</nav>
</div>
答案 0 :(得分:2)
一个选项(类似于ethans解决方案)将使用func_get_args方法,如下所示:
function active(){
$url_array = explode('/', $_SERVER['REQUEST_URI']);
$url = end($url_array);
if(in_array($url, func_get_args())){
echo 'active'; //class name in css
}
}
然后您可以使用以下方法调用该方法:
<?php active("advertising.php", "something.php", "else.php"); ?>
答案 1 :(得分:0)
您可以允许active()
函数接受一系列脚本名称。
function active(array $current_page){
$url_array = explode('/', $_SERVER['REQUEST_URI']) ;
$url = end($url_array);
foreach ($current_page as $page) {}
if($page == $url){
echo 'active'; //class name in css
return;
}
}
}
然后,对于投资组合菜单,您可以这样称呼它:
<?php active(array('advertising.php',"annual.php","brochures.html","cards.html", //etc)); ?>
答案 2 :(得分:0)
您可以将正则表达式传递给函数active
,并测试匹配项。这可以让您在匹配url
时获得很多自由。
此外,虽然echo
工作正常,但我建议您只返回类名,然后使用<?=
语法在html
中包含返回的值:
<?
function active($urlPattern) {
return (preg_match('/\/(' . $urlPattern . ')\.\w+$/', $_SERVER['REQUEST_URI']))
? 'active' : ''; //class name in css
}
?>
...
<li class="<?= active("advertising|annual|brochures|cards|interactive|logos|display|photography") ?> dropdown">
所以你使用管道符号来分隔你想拥有活动样式的不同页面(没有php或html扩展名)。
该函数会检查其中一个名称是否出现在当前/
的最后.
和url
之间。
凭借正则表达的力量,你可以做更多复杂的比赛,你可能永远不需要,但掌握手头的力量真好。