将特定的类/ID应用于菜单(PHP)上的当前页面


Apply a specific class/id to current page on menu (PHP)

我有一个这样的菜单:

<div id="blahblah" style="blahblah">
<a href="http://domain.com/folder/biography"><img style="blahblah" src="blahblahblahblah"></a>
<a href="http://domain.com/folder/contacts"><img style="blahblah" src="blahblahblahblah"></a>
<a href="http://domain.com/folder/gallery"><img style="blahblah" src="blahblahblahblah"></a>
<a href="http://domain.com/folder/dontknow"><img style="blahblah" src="blahblahblahblah"></a>
</div>

想要一些自动将class="current"添加到我当前所在的页面的东西。链接(如上面的代码所示)类似于 domain.com/folder/biography 或 domain.com/folder/contacts,因此没有.php/.html 等。

我尝试过:

<div id="blahblah" style="blahblah">
<a <?php if (strpos($_SERVER['PHP_SELF'], 'biography')) echo 'class="current"';?> href="http://domain.com/folder/biography"><img style="blahblah" src="blahblahblahblah"></a>
<a <?php if (strpos($_SERVER['PHP_SELF'], 'contacts')) echo 'class="current"';?> href="http://domain.com/folder/contacts"><img style="blahblah" src="blahblahblahblah"></a>
...
...
</div>

但它不起作用...Strops 的解决方案似乎是可行的,可能我做错了......:P

你应该:

  1. !== false检查strpos()的结果。
  2. 使用$_SERVER['REQUEST_URI']而不是$_SERVER['PHP_SELF']
  3. 将代码包装在函数中。

像这样:

<?php
function get_current($name) {
  if (strpos($_SERVER['REQUEST_URI'], $name) !== false)
    echo 'class="current"';
}
?>
<div id="blahblah" style="blahblah">
  <a <?php get_current('biography') ?> href="http://domain.com/folder/biography"><img style="blahblah" src="blahblahblahblah"></a>
  <a <?php get_current('contacts') ?> href="http://domain.com/folder/contacts"><img style="blahblah" src="blahblahblahblah"></a>
  ...
  ...
</div>

如果位置为 0,那么它在 PHP 中的计算结果为 FALSE。 您应该专门检查返回值,即>= 0。

而不是strpos(),你可以试试这个:

<?php $current = basename($path, ".php"); ?>
<a href="blahblah"<?php if ($current == 'biographies') echo ' class="current"'; ?> />

$current 是当前文件的名称,不带.php扩展名。