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

2022-01-06 00:00:00 php menu

我有一个这样的菜单:

<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>

我想要一些可以自动将 class="current" 添加到我当前所在页面的内容.链接(如您在上面的代码中所见)类似于 domain.com/folder/biography 或 domain.com/folder/contacts,所以没有 .php/.html 等

我尝试过:

<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>......

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

解决方案

你应该:

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

像这样:

<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>......

I have a menu like this:

<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>

I'd like to have something that automatically adds a class="current" to the page I'm currently in. Links (as you can see in the code above) are like domain.com/folder/biography or domain.com/folder/contacts, so without .php/.html, etc.

I tried with:

<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>

But it doesn't work... the solution with strops seems viable, probably I'm doing it wrong.. :P

解决方案

You should:

  1. check the result of strpos() with !== false.
  2. Use $_SERVER['REQUEST_URI'] rather than $_SERVER['PHP_SELF'].
  3. Wrap the code inside a function.

Something like this:

<?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>

相关文章