Man ist ja neugierig und ich wollte wissen, wie man das auch mit PHP machen kann. Dies ist das Ergebnis:
1. Mit String-Manipulation des HTML:
$parent = $_SERVER["SCRIPT_NAME"];
preg_match_all('/href="([^"]+)"/', $html, $matches);
var_dump($parent);
var_dump($matches);
for ($i = 0; $i < count($matches[1]); $i++) {
$href = $matches[0][$i];
$url = $matches[1][$i];
if (strpos($parent, $url) !== false) {
$htmlModStr = str_replace($href, $href . ' class="active"', $html);
}
}
var_dump($htmlModStr);
echo $htmlModStr;
Alles anzeigen
2. Mit Parsen durch DOMDocument:
$parent = $_SERVER["SCRIPT_NAME"];
$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_NOWARNING | LIBXML_NOERROR);
$links = $dom->getElementsByTagName('a');
foreach ($links as $link) {
$url = $link->getAttribute('href');
if (strpos($parent, $url) !== false) {
$link->setAttribute('class', 'active');
}
}
$htmlModDom = $dom->saveHTML();
var_dump($htmlModDom);
echo $htmlModDom;
Alles anzeigen
Bei beiden wird zunächst das HTML als String in der Variablen $html definiert, z. B.:
$html = '
<nav>
<ul>
<li> <a id="navi01" href="index.php">Startseite</a></li>
<li> <a id="navi02" href="master-1.php">Seite 1</a></li>
<li> <a id="navi03" href="master-2.php">Seite 2</a></li>
</ul>
</nav>';
$parent = $_SERVER["SCRIPT_NAME"];
Beides erfordert keine Änderungen in der Elterndatei und ist nicht viel komplizierter als die Lösung mit Javascript.