2013-04-14 44 views
1

我想建立一個個人網站,(對HTML和PHP相當新),並且在構建動態菜單欄時遇到困難。通過動態,我的意思是我希望突出顯示使用的頁面。動態html菜單使用php

現在我的頁面上有一個水平菜單(主頁,聯繫人等等),並設置了CSS,這樣當其中一個鏈接的屬性爲class="active"時,該項目保持高亮顯示用戶知道他或她在哪個頁面上)。

例如,在一個靜態的HTML頁面我會複製下面的代碼粘貼到對方的靜態頁面,只需更改其中class="active"屬性是用正確的頁對齊:

<a href="?page=home" class="active">Home</a> 
<a href="?page=pagetwo">Page Two</a> 
<a href="?page=contact">Contact</a> 

我當然希望使用PHP可以最大限度地減少我散佈的重複代碼的數量。

到目前爲止,我已經按照這個page的第一個答案,它工作得很好。我可以點擊一個菜單項,內容出現在頁面的主體中。但是:

  • 我不能動態地突出顯示菜單,因爲菜單選項(<a href />行)不是通過PHP動態創建的。
  • 當我去的網頁直接通過index.php文件,我得到一個錯誤:

Notice: Undefined index: 'page' in C:\xampp\htdocs\index.php on line 43

顯然,當我直接進入該頁面時,?page=home變量並沒有在該行設置:

<a href="?page=home">Home</a> 

因此,GET中的'page'變量尚未設置。我用if語句來檢查它是否未設置併發送主頁html。但是,我認爲這不是最好的方法,當我嘗試解決b)部分時,我想我需要徹底改變它。我的整個PHP腳本是這樣的:

<?php 

$current_page = 'home'; 
$pages = array('home', 'pagetwo', 'contact'); 

function setActiveHeader() { 

    global $current_page; 
    global $pages; 
    $arr_length = count($pages); 

    for($x=0;$x<$arr_length;$x++) { 
    if($pages[$x] == $current_page) { 
     echo "<a href=\"?page=$pages[$x]\" class=\"active\">$pages[$x]</a>"; 
    } else { 
     echo "<a href=\"?page=$pages[$x]\">$pages[$x]</a>"; 
    } 
    } 


} 

function putPage($page) { 
    // put a list of allowed pages here 
    global $pages; 

    $page = trim($page); 
    $page = (in_array($page, $pages)) ? $page : 'home'; 

    // set current page global variable 
    $GLOBALS['current_page'] = $page; 

    // output contents of page selected 
    echo @file_get_contents('.\html\\' . $page . '.html'); 
} 

?> 

我只是嘗試調用setActiveHeader()從HTML,但不工作的權利。菜單輸出正確,但正確的項目不會突出顯示,它只是停留在突出顯示的主頁選項上。不知道爲什麼它沒有被更新。有沒有更好的方式去做這件事?

+0

似乎你不有43行,你知道哪些線是線43的嗎? – asifrc

+0

對,對不起,我只是使用代碼片段,所以行不完全匹配。問題是:putPage($ _ GET ['page']); – Mike

回答

1

您的代碼最多隻有37行,如果沒有錯誤引用的行,我們不會太多,但我會盡我所能。

基本上,Undefined Index的意思是,你試圖訪問數組中未設置的元素。我是,你猜你試圖訪問$pages['page']

有兩種方法可以解決這個問題。添加page$pages陣列上的第四行:

pages = array('home', 'pagetwo', 'contact', 'page'); 

或者包裹43線與if語句:

<?php 

$pages = array('home', 'about'); 

if (isset($pages['page'])) { 
    echo $pages['page']; 
} 

?> 

然而,一個更容易的方法是使用CSS:

home.php

<html> 
    <head> 
     <title>Foo</title> 
    </head> 

    <body id="home"> 
     <ul class="menu"> 
      <li id="link-home"><a>Home</a></li> 
     </ul> 
    </body> 
</html> 

的style.css

body#home { 
    // active link styling here 
} 
+0

謝謝,你對CSS的使用是正確的,但我想我強迫自己學習PHP,所以我堅持使用它。 – Mike

+1

我最終根據您的建議添加了以下內容: if(isset($ _GET ['page'])&&!empty($ _GET ['page'])){ $ current_page = $ _GET ['page' ]。 } 要檢查它的集合是否爲空,然後將其設置爲它應該是的,否則默認爲home。 – Mike