【发布时间】:2013-04-14 11:43:31
【问题描述】:
我正在尝试构建一个个人网站(对 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进入页面时,报错:
注意:未定义索引:第 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');
}
?>
我只是尝试从 HTML 中调用 setActiveHeader(),但这不起作用。菜单输出正确,但正确的项目没有突出显示,它只是停留在突出显示的主页选项上。不知道为什么不更新。有没有更好的方法来做到这一点?
【问题讨论】:
-
您似乎没有 43 行,您能确定哪一行是您的第 43 行吗?
-
对,对不起,我只是在使用 sn-ps 代码,所以这些行不完全匹配。那行是问题所在: putPage($_GET['page']);
标签: php