带有.a​​ctive类的PHP菜单

时间:2017-01-22 23:15:38

标签: php navigation

我尝试在php中构建导航,并在页面显示时向.active元素添加<li>类。我找到了这段代码,它适用于顶级元素,即当所选页面加载时,它会将.active类应用于<li>

<?php
$nav = <<<NAV
    <nav id="nav">
        <ul>
            <li><a href="/">Home</a></li>
            <li><a href="/section1/">Section 1</a></li>
            <li><a href="/section2/">Section 2</a></li>
        </ul>
    </nav>
NAV;

$lines = explode("\n", $nav);
foreach ($lines as $line) {
    $current = false;
    preg_match('/href="([^"]+)"/', $line, $url);
    if (substr($_SERVER["REQUEST_URI"], 0, 5) == substr(@$url[1], 0, 5)) {
        $line = str_replace('<a h', '<a  class="active" h', $line);
    }
    echo $line."\n";
}
?>

但是,当我向html添加一些子页面时,即使显示父页面,这些子页面也会继承.active类。同样,如果显示子页面,则父级也会继承.active类。

<?php
$nav = <<<NAV
    <nav id="nav">
        <ul>
            <li><a href="/">Home</a></li>
            <li><a href="/section1/">Section 1</a>
                <ul>
                    <li><a href="/section1/child-page-1">Child Page 1</a></li>
                    <li><a href="/section1/child-page-2">Child Page 2</a></li>
                </ul>
            </li>
            <li><a href="/section2/">Section 2</a></li>
        </ul>
    </nav>
NAV;

$lines = explode("\n", $nav);
foreach ($lines as $line) {
    $current = false;
    preg_match('/href="([^"]+)"/', $line, $url);
    if (substr($_SERVER["REQUEST_URI"], 0, 5) == substr(@$url[1], 0, 5)) {
        $line = str_replace('<a h', '<a  class="active" h', $line);
    }
    echo $line."\n";
}
?>

有没有办法调整php,只有<li>到相应的页面继承.active类。此外,如果.active元素是孩子,那么父<li>会获得类似.active-trail的类名吗?

或者有一种更好的方法可以通过jQuery这样的另一种语言来实现吗?

真的很感激任何帮助。

0 个答案:

没有答案