[英]Dynamic html menu using 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來最大程度地減少散布在我周圍的重復代碼的數量。
到目前為止,我已經按照本頁上的第一個答案進行了。 我可以單擊一個菜單項,其內容出現在頁面的主體中。 然而:
<a href />
行)不是通過PHP動態創建的,因此無法動態突出顯示菜單。 注意:第43行的C:\\ xampp \\ htdocs \\ index.php中未定義的索引:'page'
顯然,當我直接進入頁面時,未在行中設置?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');
}
?>
我只是嘗試從HTML調用setActiveHeader()
,但這行不通。 菜單輸出正確,但是正確的項目沒有突出顯示,只是停留在突出顯示的主頁選項上。 不知道為什么不進行更新。 有沒有更好的方法可以做到這一點?
您的代碼最多只能顯示37行,如果沒有錯誤所引用的行,我們將無濟於事,但我會盡力而為。
基本上, Undefined Index
意思是,您正在嘗試訪問未設置的數組中的元素。 我猜您正在嘗試訪問$pages['page']
。
有兩種方法可以解決此問題。 將page
添加到第四行的$pages
數組中:
pages = array('home', 'pagetwo', 'contact', 'page');
或用if語句包裝第43行:
<?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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.