に変換したいナビゲーション構造(スニペット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>";
}
}
}