我不太擅长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 & 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
也放在第二行。