0

に変換したいナビゲーション構造(スニペット1)を保持する配列があります(liとaを使用)。スニペット 2 のコードは正しく機能しており、完璧な HTML 構造を作成しています。今追加したいのは、現在のページ (の親) である各アイテムの .active クラスだけです。

たとえば、/test/testtest ページにいる場合、/test を含む li と /testtest (/test の子として) を含む li の両方が .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