1

我正在尝试构建一个个人网站(对 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 调用,但这不起作用。菜单输出正确,但正确的项目没有突出显示,它只是停留在突出显示的主页选项上。不知道为什么不更新。有没有更好的方法来做到这一点?

4

1 回答 1

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:

主页.php

<html>
    <head>
        <title>Foo</title>
    </head>

    <body id="home">
        <ul class="menu">
            <li id="link-home"><a>Home</a></li>
        </ul>
    </body>
</html>

样式.css

body#home {
    // active link styling here
}
于 2013-04-14T03:43:31.533 回答