【问题标题】:Apply a specific class/id to current page on menu (PHP)将特定的类/ID应用于菜单上的当前页面(PHP)
【发布时间】:2012-06-04 16:22:11
【问题描述】:

我有一个这样的菜单:

<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

【问题讨论】:

  • 请记住 strpos 将返回位置,因此如果脚本的名称是“biography.php”并且您搜索“biorgraphy”,它将返回 0,这将评估为 false ... 添加!== false 给你的条件...

标签: php menu


【解决方案1】:

你应该:

  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>

【讨论】:

  • 另一个问题.. ;) 对于一个条目,我有“子条目”。有没有办法让多个页面为一个条目“提供”当前类?类似于: href="domain.com/folder/biography"><img style="blahblah" src="blahblahblahblah">
  • 我不确定我是否理解你的问题,但 PHP 支持多参数函数,例如:get_current('page1', 'page2', 'page3')。见func_get_args()。如果您使用 HTML 代码创建一个新问题并解释您想要实现的目标,我可以给您详细的答案。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 感谢您的回复! ;) 不幸的是,这不起作用.. :(
    猜你喜欢
    • 2017-03-12
    • 1970-01-01
    • 2011-04-19
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多