我正在尝试构建一个个人网站(相当新的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动态创建的。注意:未定义的索引:&#39; page&#39;在第43行的C:\ xampp \ htdocs \ index.php
显然,当我直接浏览页面时,?page=home
变量未在行中设置:
<a href="?page=home">Home</a>
所以,&#39;页面&#39; 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');
}
?>
我只是尝试从HTML中调用setActiveHeader()
,但这不能正常工作。菜单输出正确,但正确的项目没有突出显示,它只是停留在突出显示的主页选项上。不知道为什么没有更新。有没有更好的方法来做这件事?
答案 0 :(得分:1)
您的代码最多只能达到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
}