0

我有一个包含我的导航结构(片段 1)的数组,我想将其转换为 's(带有 li's 和 a's)。片段 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>";
        }
    }
}
4

2 回答 2

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 比较中用 $element 切换 $this->pages[$element]["path"] ......这看起来是问题所在。

于 2013-09-17T16:10:11.183 回答
0

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

我决定引入一个变量level$this->level

于 2013-09-17T20:41:29.550 回答