PHP:捕获位置以在导航菜单中附加id

时间:2013-10-04 02:31:02

标签: php strpos php-5.4

我正在使用此PHP函数根据您所在的页面将id="current"附加到我的导航菜单。

function get_current() {
    foreach(func_get_args() as $arg) {
        if (strpos($_SERVER['REQUEST_URI'], $arg) !== false) {
            echo 'id="current"';
        }
    }
}

简单的HTML:

<ul>
    <li <?php get_current('') ?>><a>HOME</a></li>
    <li <?php get_current('page1.php') ?>><a>PAGE 1</a></li>
    <li <?php get_current('page2.php') ?>><a>PAGE 2</a></li>
    <li <?php get_current('page3.php') ?>><a>PAGE 3</a></li>
    <li <?php get_current('page4.php') ?>><a>PAGE 4</a></li>
</ul>

除主页外,它工作正常。我应该使用什么参数?主页位于域的根目录下。我想避免强迫用户转到index.php,而是将其设置为参数。

1 个答案:

答案 0 :(得分:1)

在你的情况下,我会这样解决:

<?
function get_current( $nav_page ) {
    $uri = $_SERVER['REQUEST_URI'];
    return ( $uri == $nav_page ) ? ' id="current" ' : '';
}
?>

HTML中的小变化:

<ul>
    <li <?= get_current('/') ?> ><a>HOME</a></li>
    <li <?= get_current('/page1.php') ?> ><a>PAGE 1</a></li>
    <li <?= get_current('/page2.php') ?> ><a>PAGE 2</a></li>
    <li <?= get_current('/page3.php') ?> ><a>PAGE 3</a></li>
    <li <?= get_current('/page4.php') ?> ><a>PAGE 4</a></li>
</ul>

请注意,我将参数更改为绝对URL,因为$_SERVER['REQUEST_URI']包含绝对路径。

编辑:

由于您使用了func_get_args(),因此您可能会接受任意数量的'page-name.php'作为get_current()的参数。在这种情况下,get_current函数变为:

function get_current() {
    $uri = $_SERVER['REQUEST_URI'];
    if ( in_array( $uri, func_get_args() ) )
        return ' id="current" ';
    return '';
}

及其附带的HTML:

<li <?= get_current('/', '/index.php')?> > ... </li>

EDIT2:

您的$_SERVER['REQUEST_URI']表示文件位于/new/文件夹中。更改了逻辑以比较端部件。

<?
function get_current( $nav_page ) {
    $uri = $_SERVER['REQUEST_URI'];
    return is_rear_match( $uri, $nav_page ) ? ' id="current" ' : '';
}

function is_rear_math( $haystack, $needle ) {
    $rear = substr($haystack, -strlen($needle));
    return $rear !== false && $rear === $needle;        
}
?>

HTML:

<ul>
    <li <?= get_current('/') ?> ><a>HOME</a></li>
    <li <?= get_current('/page1.php') ?> ><a>PAGE 1</a></li>
    <li <?= get_current('/page2.php') ?> ><a>PAGE 2</a></li>
    <li <?= get_current('/page3.php') ?> ><a>PAGE 3</a></li>
    <li <?= get_current('/page4.php') ?> ><a>PAGE 4</a></li>
</ul>