我正在尝试构建一个个人网站(对 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 动态创建的。 - 当我直接通过index.php进入页面时,出现错误:
注意:未定义的索引:第 43 行 C:\xampp\htdocs\index.php 中的“页面”
很明显,当我直接去页面时,?page=home
该行中没有设置变量:
<a href="?page=home">Home</a>
因此,尚未设置 GET 中的“页面”变量。我用 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 调用,但这不起作用。菜单输出正确,但正确的项目没有突出显示,它只是停留在突出显示的主页选项上。不知道为什么不更新。有没有更好的方法来做到这一点?