Die Parameter sind nach den Umstellungen irreführend benannt.
- $href ist keine URL, sondern der Unterseitenname und die URL baust Du daraus zusammen. Ich würde $href in $subpageName umbenennen.
Danke für den Hinweis!
- $name ist kein Name, sondern ein HTML-formatierter Name. Ich hatte schon Luft geholt, um das fehlende htmlspecialchars anzumeckern - aber das geht ja nicht weil Du da deine Spezialtypographie einsetzt. Man KÖNNTE (muss nicht) $name in $nameHtml umbenennen, um klarzumachen, dass dieser Wert nicht durch den Kontextwechsel darf.
Ist ein HTML-formatierter Name nicht dennoch ein Name? Was meinst du mit Kontextwechsel?
- $uri ist die Grundlage für die Bestimmung des Subpage-Ordners. Das könnte man auch herausziehen - vermutlich brauchst Du das öfter. Du kannst
$subpages
nur einmal ermitteln und dem Wert an navAnchor übergeben, statt ihn jedesmal neu zu bestimmen. Die Aufgabe "Ermittle den Order der Subpages" gehört meiner Meinung nach nicht in eine Funktion "Erzeuge einen Navigationsanker" - das sind getrennte Aufgaben und damit widerspricht das dem Single Responsibility Principle (SRP).
Das ist ein guter Tipp, danke! Ich wusste auch bisher nichts von diesem SRP, aber ergibt Sinn.
Dieser Codeteil
if ( !empty( $_GET['subpage'] ) ) { if ( $href === $_GET['subpage'] ) $current = 'aria-current="page"'; } else { if ( $href === 'game' ) $current = 'aria-current="page"'; }
hat für mich ebenfalls einen SRP-Smell. Das ist die Ermittlung der angeforderten Subpage, mit Zuweisung eines Defaults falls keine angefordert ist. Abhängig davon wird das aria-current Attribut hinzugefügt. Das sind getrennte Aufgaben. Ich würde eine weitere Funktion schreiben und navAnchor so ändern:
<?php function getSubpageName() { if ( empty ( $_GET['subpage'] ) ) return "game"; return $_GET['subpage']; } function navAnchor($anchorSubpageName, $nameHtml, $subpagesFolder) { $current = getSubpageName() == $anchorSubpageName ? 'aria-current="page"' : ""; if ( file_exists( $subpagesFolder . $anchorSubpageName . '.php' ) ): ?> <a href="<?= $anchorSubpageName ?>" <?= $current ?>><?= $nameHtml ?></a> <?php endif; }
Wird gemacht! 👌