2013-08-21 25 views
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」根據用戶所在的頁面而變化?

+0

什麼呢類活躍爲此,你只是試圖讓鏈接變成不同的顏色來顯示人們在網頁上?如果是這樣,只需在CSS中設置a:active爲所需的顏色? – wmfrancia

+0

謝謝大家,使用PHP_SELF來讓它工作,並沒有意識到這一點 – Harry12345

回答

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

您可以使用此:$_SERVER['PHP_SELF']

它會告訴你當前頁面的名稱。

然後,在你的頭文件,中庸之道使用這樣的:

<a href="contact.php" <?php if($_SERVER['PHP_SELF'] == "/contact.php") echo 'class="active"'; ?>>Contact</a> 
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'); 
0

您可以使用PHP_SELF得到這樣的文件名:

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

您可以使用服務器變量PHP_SELF即。 $_SERVER['PHP_SELF']它給出了文件名即ie。 /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> 

希望它能幫助:)

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>'; 
相關問題