1

我正在制作一个网站,所有页面都包含 header.php,它只是页面顶部的徽标和导航栏,下面是导航菜单的代码。

<nav id="navmenu">
<ul>
<li><a href="index.php" class="active">Home</a></li>
<li><a href="about.php">About</a></li>
<li><a href="portfolio.php">Portfolio</a></li>
<li><a href="contact.php">Contact</a></li>
</ul>
</nav>

我怎样才能使 class="active" 根据用户所在的页面而变化?

4

9 回答 9

1

你可以使用这个:$_SERVER['PHP_SELF']

它会告诉您当前所在页面的名称。

然后,在您的头文件中,使用如下内容:

<a href="contact.php" <?php if($_SERVER['PHP_SELF'] == "/contact.php") echo 'class="active"'; ?>>Contact</a>
于 2013-08-21T17:03:08.077 回答
1

使用 $_SERVER['PHP_SELF']

<li><a href="index.php" <?php if ($_SERVER['PHP_SELF'] == "/index.php") echo "class='active'" ?>>Home</a></li>

<li><a href="about.php" <?php if ($_SERVER['PHP_SELF'] == "/about.php") echo "class='active'" ?>>About</a></li>
于 2013-08-21T17:06:35.903 回答
1

您可以使用服务器变量 PHP_SELF 即。$_SERVER['PHP_SELF']它给出了文件名,即。/index.php附加您的站点名称,即。www.example.com

<nav id="navmenu">
<ul>
<li><a href="index.php" <?php if ($_SERVER['PHP_SELF'] == "/index.php") echo "class='active'" ?>>Home</a></li>
<li><a href="about.php" <?php if ($_SERVER['PHP_SELF'] == "/about.php") echo "class='active'" ?>>About</a></li>
<li><a href="portfolio.php" <?php if ($_SERVER['PHP_SELF'] == "/portfolio.php") echo "class='active'" ?>>Portfolio</a></li>
<li><a href="contact.php" <?php if ($_SERVER['PHP_SELF'] == "/contact.php") echo "class='active'" ?>>Contact</a></li>
</ul>
</nav>

希望它有所帮助:)

于 2013-08-21T17:13:47.170 回答
0

可能有不止一种方法可以做这样的事情。最直接的可能是将头文件更改为如下内容:

<?php
    if (!defined('HOME_LINK_CLASS')) {
        define('HOME_LINK_CLASS', 'active');
    }
?><nav id="navmenu">
<ul>
<li><a href="index.php" class="<?php echo HOME_LINK_CLASS;?>">Home</a></li>
<li><a href="about.php">About</a></li>
<li><a href="portfolio.php">Portfolio</a></li>
<li><a href="contact.php">Contact</a></li>
</ul>
</nav>

现在,如果您希望该类在特定页面上(例如)“非活动”,您可以在include该页面上的命令之前添加此行:

define('HOME_LINK_CLASS', 'inactive');
于 2013-08-21T17:03:20.547 回答
0

http://webcheatsheet.com/PHP/get_current_page_url.php

使用类似这样的东西来检查当前页面的 URL。然后使用 if 语句来要求某些文件

于 2013-08-21T17:04:33.820 回答
0

您可以使用PHP_SELF以下方式获取文件的名称:

<?php
$page = $_SERVER["PHP_SELF"];
switch($page){
    case "/index.php": $class = "index";break;
    case "/home.php": $class = "home";break;
    case "/info.php": $class = "info";break;
    default: $class = "active";break;
}
?>

<nav id="navmenu">
    <ul>
        <li><a href="index.php" class="<?php echo $class; ?>">Home</a></li>
        <li><a href="about.php">About</a></li>
        <li><a href="portfolio.php">Portfolio</a></li>
        <li><a href="contact.php">Contact</a></li>
    </ul>
</nav>
于 2013-08-21T17:10:47.587 回答
0

您可以使用检索当前脚本名称,$_SERVER['PHP_SELF']然后使用三元语句将active属性添加到该链接。

<?php $p = strtolower(basename($_SERVER['PHP_SELF'])); ?>

<nav id="navmenu">
<ul>
<li><a href="<?php echo ($p=="home.php" ? "active" : "")?>">Home</a></li>
<li><a href="<?php echo ($p=="about.php" ? "active" : "")?>">About</a></li>
<li><a href="<?php echo ($p=="portfolio.php" ? "active" : "")?>">Portfolio</a></li>
<li><a href="<?php echo ($p=="contact.php" ? "active" : "")?>">Contact</a></li>
</ul>
</nav>
于 2013-08-21T17:11:54.983 回答
0

如果您的页面地址 ( document.location) 与href菜单上的一样,则不需要活动项目的类,只需使用伪 CSS 类即可:active

否则,您需要检查$_SERVER超全局PHP_SELF并将该类添加到所需的菜单项。类似于下面的代码:

//code snipped not tested
<li><a href="index.php" class="<?php echo preg_match("/index.php$/", $_SERVER["PHP_SELF"]) ? ("active") : (""); ?>">Home</a></li>
于 2013-08-21T17:12:35.673 回答
0

执行此操作的简单方法是创建一个页面数组,然后遍历该数组以创建菜单项,并检查每个循环是否是活动文件。使用这种方法添加或删除页面也很容易,只需更改菜单数组中的项目,而且代码更小,在页面数量多的情况下更易于阅读:

// get active file, $_SERVER['SCRIPT_NAME'] is less spoofable than $_SERVER['PHP_SELF']
$active = basename( $_SERVER['SCRIPT_NAME'] );

// create array of pages
$main_nav = array( 
    'index.php' => 'Home', 
    'about.php' => 'About', 
    'portfolio.php' => 'Portfolio', 
    'contact.php'=>'Contact'
    );

// create menu 
//   notice the usage of PHP shorthand:
//   ( $active == $file ? 'class="active"' : '' ) is the same as:
//
//   if ( $active == $file ) 'class="active"';
//   else '';
//
echo '<nav id="navmenu"><ul>'.PHP_EOL;
foreach ($main_nav as $file => $title) {
    echo '<li><a href="' . $file . '" ' . ( $active == $file ? 'class="active"' : '' ) . '>' . $title . '</a></li>'.PHP_EOL;
}
echo '</ul></nav>';
于 2013-08-21T17:35:59.950 回答