在导航上使用preg_match来添加活动状态


Using preg_match on my nav to add active state

我不太擅长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";} 
?>

有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()节。有办法解决这个问题吗?

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

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

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

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

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