使用php的动态html菜单

时间:2013-04-14 02:32:53

标签: 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访问该页面时,出现错误:
  

注意:未定义的索引:&#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(),但这不能正常工作。菜单输出正确,但正确的项目没有突出显示,它只是停留在突出显示的主页选项上。不知道为什么没有更新。有没有更好的方法来做这件事?

1 个答案:

答案 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
}