REQUEST_URI的动态菜单适用于'/'root但不适用于'/index.php'

时间:2014-04-09 17:55:12

标签: php html5 oop

以下代码的作用是检查数组中的所有导航项,制作一个html列表,然后检查URI匹配项以了解哪个菜单项应显示为活动状态。< / p>

一切都按预期运作。但有一件事。

当我在根domain.com时,菜单中的Home项显示为活动状态。但是当我去/index.php时,同样的事情应该发生,但我不希望他们两者工作。

我不太确定在我的代码中将在何处或如何实现它。

PHP

<?php
$GLOBALS['config'] = array(
    'navigation' => array(
        'Home' => '/', //this part here
        'Sign up' => '/signup.php',
        'Login' => '/login.php'
    )
);

class Navigation {
    public static function get() {
        $URI = $_SERVER['REQUEST_URI'];
        $navArr = Config::get('navigation');

        $navigation = '<ul id="nav">' . "\n";
        foreach($navArr as $name => $path) {
            $navigation .= '    <li' . (($URI == $path) ? ' class="active"' : false) . '><a href="' . $path . '">' . $name . '</a></li>' . "\n";
        }
        $navigation .= '</ul>';

        return $navigation;
    }
}
?>

2 个答案:

答案 0 :(得分:0)

index.php不在导航数组中,这就是原因。

添加如下条目: &#39;指数&#39; =&GT; &#39; /index.php'

这是一个问题因为你不能按照你实现它的方式将2个页面分配给同一个键

或: 在你的htacess上进行重定向所以/和index.php是相同的

这样的事情: htaccess redirect index.php to root (including subdomains)


和第三个选项,使用索引和字段创建数组navitem和page:

'navigation' => array(
    0 => array('nav' => 'Home',
                'page' => '/'),
//and so on
)

我绝对会去htaccess

答案 1 :(得分:0)

<强> PHP

<?php
$GLOBALS['config'] = array(
    'navigation' => array(
        'Home'     => array('/', '/index.php'),
        'Sign up'  => array('/signup', '/signup.php'),
        'Log in'   => array('/login', '/login.php')
    )
);

class Navigation {
    public static function get() {
        $URI = $_SERVER['REQUEST_URI'];
        $navArr = Config::get('navigation');

        $navigation = '<ul id="nav">' . "\n";
        foreach($navArr as $name => $path) {
            $navigation .= '    <li' . ((in_array($URI, $path)) ? ' class="active"' : false) . '><a href="' . $path[1] . '">' . $name . '</a></li>' . "\n";
        }
        $navigation .= '</ul>';

        return $navigation;
    }
}
?>