使用PHP选择导航

0 html php

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

cbe*_*ski 6

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

基本答案:

  1. 将导航列表项放在数组中
  2. 迭代数组以输出html "<li>$item</li>"
  3. 检查每个项目以查看它是否是当前页面(更多信息如下)
    • 如果当前项当前页面,则向其添加一个html类(即class="current")

困难的部分是弄清楚哪个页面是当前页面.

解决这个问题的三种方法:

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

我已经做了三个.

  • 选项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');
Run Code Online (Sandbox Code Playgroud)

显然你需要提供一个CSS规则来改变格式li.current,但这很容易.