【问题标题】:Dynamic html menu using php使用 php 的动态 html 菜单
【发布时间】: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 的第一个答案,效果很好。我可以单击一个菜单项,内容就会出现在页面的正文中。然而:

  • 我无法让它动态突出显示菜单,因为菜单选项(&lt;a href /&gt; 行)不是通过 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


【解决方案1】:

您的代码最多只有 37 行,如果没有错误所引用的那一行,我们就不能做太多,但我会尽力而为。

基本上,Undefined Index 的意思是,您正在尝试访问未设置的数组中的元素。我猜测您正在尝试访问$pages['page']

有两种方法可以解决此问题。在第四行的$pages数组中添加page

pages = array('home', 'pagetwo', 'contact', 'page');

将第 43 行用 if 语句换行:

<?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
}

【讨论】:

  • 谢谢,你使用 CSS 是对的,但我想我是在强迫自己学习 PHP,所以我坚持使用它。
  • 根据您的建议,我最终添加了以下内容: if(isset($_GET['page']) && !empty($_GET['page'])) { $current_page = $ _GET['页面']; } 检查它的设置是否为空,然后将其设置为应有的值,否则默认为 home。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
  • 2013-06-27
  • 2013-04-14
  • 1970-01-01
  • 2019-01-08
  • 2017-09-08
  • 1970-01-01
相关资源
最近更新 更多