将HTML类添加到当前页面的(每个父级)

时间:2013-09-17 15:42:46

标签: php

我有一个数组,它保存我的导航结构(片段1),我想将其转换成's(带有li和a)。代码段2中的代码工作正常,它创建了一个完美的HTML结构。我现在唯一想要添加的是每个项目的.active类,它是当前页面的(父项)。

例如,当我在/ test / testtest页面上时,带有/ test的li和带有/ testtest的li(作为/ test的子级)都应该获得.active类。哦,$this->page->path返回当前路径,在此示例中为/test/testtest

我希望这样清楚,这有点难以解释。

摘录1:

Array
(
    [0] => /home
    [1] => /test
    [test] => Array
        (
            [0] => /test/testtest
            [testtest] => Array
                (
                    [0] => /test/testtest/3deep
                )

            [1] => /test/testtest2
        )

    [2] => /test2
    [3] => /nieuws
)

摘录2:

private function generateStructure($array) {
    foreach ( $array as $element ) {
        if ( is_array($element) ) {
            ?>
            <ul>
                <?= $this->generateStructure($element) ?>
            </ul>
            </li>
            <?php
        } else {
            $classArray = array();
            $close = (is_array(next($array))) ? false : true;

            // Active class
            if ( $this->pages[$element]["path"] == $this->page->path ) array_push($classArray, "active");

            $classes = "";
            if ( !empty($classArray) ) {
                $classes = 'class="';
                foreach ( $classArray as $class ) {
                    $classes .= $class . " ";
                }

                $classes = trim($classes) . '"';
            }

            ?>
            <li <?= $classes ?>><a href="/ocms-dev<?= $this->pages[$element]["path"] ?>"><?= $this->pages[$element]["titleNav"] ?></a>
            <?php

            // Only close it when the current element has no subnav
            if ( $close ) echo "</li>";
        }
    }
}

2 个答案:

答案 0 :(得分:0)

好的,我已经对它进行了一些尝试,我可以尝试这样做: -

function generateStructure($array) {
    foreach ( $array as $element ) {
        if ( is_array($element) ) {
        ?>
        <ul>
            <?PHP  generateStructure($element) ?>
        </ul>
        </li>
        <?php
    } else {
        $classArray = array();
        $close = (is_array(next($array))) ? false : true;

        // Active class
        if ( $element == '/test/testtest' ){ 
            array_push($classArray, "active");
            echo ("match found");
        }

        $classes = "";
        if ( !empty($classArray) ) {
            $classes = 'class="';
            foreach ( $classArray as $class ) {
                $classes .= $class . " ";
            }

            $classes = trim($classes) . '"';
        }

        ?>
        <li <?PHP echo $classes ?>><a href="/ocms-dev<?PHP echo $element ?>"><?PHP echo $element ?></a>
        <?php

        // Only close it when the current element has no subnav
        if ( $close ) echo "</li>";
    }
}
}
?>

我认为这主要取决于我在if比较中使用$元素切换$ this-&gt; pages [$ element] [“path”] ...这看起来是个问题。

答案 1 :(得分:0)

好的,我终于找到了解决问题的方法。

我决定引入一个level变量($this->level),然后我用它来比较数组的第n个子节点和两个网址的爆炸部分(循环中的当前元素和当前页面) )。