在我的导航栏上使用preg_match添加活动状态

时间:2011-12-22 16:23:42

标签: php

我对PHP不太好,只是基础知识。所以我使用php将活动状态添加到我的导航链接并使用css来设置样式,我想知道是否有一种方法来使用主题标签。我有两个不同的导航链接,都在一个页面上。第一个工作正常,因为没有使用#,但第二个因为该页面的信息与默认页面在同一页面上,我有以下代码:

<?php
if (preg_match ("//", $_SERVER['REQUEST_URI'])){ $navID = "home";} 
if (preg_match ("/service-area/", $_SERVER['REQUEST_URI'])){ $navID = "service";} 
if (preg_match ("/about/", $_SERVER['REQUEST_URI'])){ $navID = "about";} 
    if (preg_match ("/heating-air/", $_SERVER['REQUEST_URI'])){ $navID = "heating";} 
if (preg_match ("/plumbing-hvac/", $_SERVER['REQUEST_URI'])){ $navID = "plumbing";} 
?>

Theres the pregmatch,这里是链接:

<ul class="right-nav">
            <li class="heating-air"><a href="/plumbing-hvac/#heating-air" <?= ($navID == 'heating') ? ' class="active"' : '' ?>>Plumbing</a></li>   
            <li class="plumbing"><a href="/plumbing-hvac/" <?= ($navID == 'plumbing') ? ' class="active"' : '' ?>>Heating &amp; Air</a></li>
        </ul>

每当我将锚链接添加到preg_match()部分时,我都会收到错误消息。有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

网址中以#开头的部分永远不会传输到服务器,因此$_SERVER['REQUEST_URI']不会包含它。

因此,不管你得到什么错误,寻找它都没有任何意义。

答案 1 :(得分:0)

我认为你过于复杂,你可以使用strpos而不是正则表达式:

$navID = "home";
$navID = (strpos($_SERVER['REQUEST_URI'], 'service-area') !== false) ? 'service' : $navID;
//etc

请注意,第一行是为了清晰起见,您也可以将home放在第二行。