2014-01-13 64 views
0

我想把一個菜單放在一起,它會感覺到什麼頁面加載。此網站不是在CMS中完成的,而是直接的PHP/HTML代碼。看看是否有一個項目是真的

我目前的導航工作的主要鏈接。有一個下拉,我有問題。我需要能夠看到父母或任何下拉孩子是否活躍。如果其中一個孩子活躍。在下面的例子中,這是「FAQ」,孩子們是「FAQ1」,「FAQ2」和「FAQ3」。

對於這個例子,我使用了一個名爲「active」的CSS狀態。

<style> 
a{color:red;} 
.active{color:blue;} 
</style> 

這是用於菜單的腳本。主頁,產品和聯繫人的鏈接按預期工作。

<ul> 
<li><a href="index.php" id="homenav" <?php if (strpos($_SERVER['PHP_SELF'], 'index.php')) echo 'class="active"';?>>Home</a></li> 
<li><a href="products.php" id ="prodnav" <?php if (strpos($_SERVER['PHP_SELF'], 'products.php')) echo 'class="active"';?>>Products</a></li> 
<li><a href="faq.php" id ="faqnav" <?php if (strpos($_SERVER['PHP_SELF'], 'faq.php, faq1.php, faq2.php, faq3.php')) echo 'class="active"';?>>FAQ</a> 
    <ul> 
     <li><a href="faq1.php">FAQ1</a></li> 
     <li><a href="faq2.php">FAQ2</a></li> 
     <li><a href="faq3.php">FAQ3</a></li> 
    </ul> 
</li> 
<li><a href="contact.php" id ="connav" <?php if (strpos($_SERVER['PHP_SELF'], 'contact.php')) echo 'class="active"';?>>contact us</a></li> 
</ul> 

請問我應該如何寫這行以讓它以其他方式工作?

<li> 
    <a href="faq.php" id ="faqnav" 
    <?php 
    if (strpos($_SERVER['PHP_SELF'], 'faq.php, faq1.php, faq2.php, faq3.php')) 
    echo 'class="active"'; 
    ?> 
    >FAQ</a> 
</li> 
+0

你的問題是什麼? – scrblnrd3

+0

你看過這個問題嗎? http://stackoverflow.com/questions/6284553/using-an-array-as-needles-in-strpos – user1408643

回答

2

strpos()只接受每個參數一個字符串,你不能給它一個列表。 嘗試此:

<?php if (in_array(basename($_SERVER['PHP_SELF']), array('faq.php', 'faq1.php', 'faq2.php', 'faq3.php'))) echo 'class="active"';?>

  • basename()去掉文件名的路徑,所以你只具有純文件名
  • in_array()然後檢查是否該路徑是在一個陣列
  • array()生成將數組字符串交給in_array()。請注意,有4個獨立的字符串,不像代碼中那樣長。
+0

你的代碼給了我一個錯誤消息。然而,將它改爲:'<?php if(in_array(basename($ _ SERVER ['PHP_SELF']),array('faq.php','faq1.php','faq2.php','faq3.php')) ))echo'class =「active」';?>'工作。它錯過了一個結束)。謝謝! – Michele

+0

修好了,謝謝。 – MrTweek

0

使用in_array爲了這個目的:

if (in_array($_SERVER['PHP_SELF'], array('faq.php', 'faq1.php', 'faq2.php', 'faq3.php')) echo 'class="active"'; 

http://php.net/manual/de/function.in-array.php

+1

在這種情況下'in_array'不等於'strpos'。例如,如果'$ _SERVER ['PHP_SELF'] =='en/faq.php',那麼'strpos'會正確地認出你是在FAQ頁面上,而'in_array'解決方案則不會。 MrTweeks的回答在這方面更好。 – CompuChip

0

如果你沒有包含任何faq其他頁面,你可以簡單地使用:

if (strpos($_SERVER['PHP_SELF'], 'faq') !== false) 

注我正在使用!== false作爲strpos可以返回0當在字符串的開頭找到faq時。您應該也可以將其用於其他比較。

否則,請使用@MrTweek的in_array解決方案。

相關問題