使用PHP选择导航

时间:2010-08-12 03:37:49

标签: php html

是否可以使用PHP从服务器检测网页用户在您网站上导航到的位置,然后更新导航菜单的类,以使CSS样式成为当前选择以向用户指示当前选择?

2 个答案:

答案 0 :(得分:6)

这是一个普遍的问题,并没有真正优雅的“一刀切”解决方案。这主要取决于您存储列表的方式。

基本答案:

  1. 将导航列表项放入数组
  2. 遍历数组以输出html "<li>$item</li>"
  3. 检查每个项目以查看它是否是当前页面(更多信息如下)
    • 如果当前商品 当前页面,请向其添加一个html类(即class="current"
  4. 困难的部分是找出哪个页面是当前页面。

    解决此问题的三种方法:

    1. (最困难)删除部分路径请求(http://blah/my-page)并将其与导航列表中的某些数据进行比较。
    2. (大多数维护)定义与导航列表中的内容匹配的每页变量。
    3. (大多数设置/开销)在数据库模式中使用导航项和页面之间的外键关系
    4. 我已经完成了这三项工作。

      • 选项1工作且最强大(您可以将其应用于多个导航列表或树中的多个层),但很难以便携方式正确执行,我对此有所保留。
      • 选项2最初是最容易设置的,但在添加或删除页面时,您必须在多个位置跟踪数据。我不喜欢维修。
      • 选项3是最容易维护但需要数据库(如果要创建未存储在数据库中的导航列表条目或者没有数据库处理的匹配页面,则需要额外的计划)。这是进行更大项目的最佳方式。

      如果有比这些更好的解决方案,我想知道,因为这个问题总是让我烦恼。

      #2

      的示例

      选项二是最简单的,所以这是一个简单的实现。

      $nav = array(
          '/' => 'Home',
          '/portfolio/' => 'Portfolio',
          '/contact/' => 'Contact',
      );
      
      function nav($current)
      {
          GLOBAL $nav;
          $output = '';
          foreach($nav as $key => $var)
          {
              # First bit of common HTML
              $output .= '<li><a';
              if ($current == $var)
              {
                  # add "current" class only for the to-be highlighted one
                  $output .=' class="current"';
              }
              # finish off common HTML
              $output .= ' href="'.$key.'">'.$var.'</a></li>'."\n";
          }
          return $output;
      }
      
      echo nav('Home');
      

      显然,您需要提供CSS规则来更改li.current上的格式,但这很容易。

答案 1 :(得分:1)

我假设您的导航栏位于包含文件中。将此代码段添加到每个导航项目(将“约”更改为唯一的部分名称)。

class="<?php if ($section == "about") {echo "selected";} ?>"

然后在您的个人页面文件中,为 $ section 变量指定相应的值。

<?php $section="about"; ?>

使用添加的.selected类根据需要设置样式。