如何在PHP中处理一件事或另一件事

时间:2015-12-07 19:23:50

标签: php

我有以下代码,并试图弄清楚如何向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>

3 个答案:

答案 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之间。

凭借正则表达的力量,你可以做更多复杂的比赛,你可能永远不需要,但掌握手头的力量真好。