Zur Navigation

Navigation-Links mit Klassen versehen

1 tomathan

Hallo,

ich bin erst kürzlich auf JKBB gestoßen und benötige für meine Zwecke ein individuelles anpassen per Klassen der Navigation. Was müsste ich ergänzen bzw. verändern, damit ich beispielsweise dem Suche Link die Klasse "suchen-side" geben kann.

Gruß Tom

29.07.2011 18:21

2 Jörg

Ganz so einfach geht das nicht, da die Navigation dynamisch aufgebaut wird. In der Datei /includes/output/menu.php ist ein Array von Menüpunkten definiert, aus welchem dann mithilfe der Funktion buildmenu() (in der Datei /includes/main/xml/xhtml.php) die Navigation gebastelt wird.

Um Klassen hinzuzufügen, könnte man vielleicht jeweils ein weiteres Array-Element hinzufügen, z.B.:

$menu[1][] = array('Suche', $u_board . '/suche', "suchen-side");

In der Funktion buildmenu() müsste dann dieser Abschnitt geändert werden::

            if ($i == 0) {
                $x_menu .= '<li>' . $x_item;
            } else {
                if ($i == 1) {
                    $x_menu .= "\n" . '<ul>' . "\n";
                    $b_ul = true;
                }
                $x_menu .= '<li>' . $x_item . '</li>' . "\n";
            }

... und folgendermaßen ergänzt / angepasst werden:

            $x_li = '<li';
            if (isset($item[2])) {
                $x_li .= ' class="' . $item[2] . '"';
            }
            $x_li .= '>';
            if ($i == 0) {
                $x_menu .= $x_li . $x_item;
            } else {
                if ($i == 1) {
                    $x_menu .= "\n" . '<ul>' . "\n";
                    $b_ul = true;
                }
                $x_menu .= $x_li . $x_item . '</li>' . "\n";
            }

Das ganze ist nicht getestet - aber so in etwa sollte es funktionieren

29.07.2011 20:48 | geändert: 29.07.2011 20:52

3 tomathan

Okay, hat geklappt vielen Dank für die schnelle Hilfe lächel

29.07.2011 21:02

4 tomathan

So ich schreib mal mein nächstes Anliegen hier rein, damit ich nicht schon wieder einen neuen Thread aufmachen muss. Ich würde gerne das MEnü um ein paar Punkte erleichtern und die Dynamik beibehalten, sieht dann wie folgt für den unregistrierten User aus:

Suche
Neue Beiträge
Registrieren
Login
Regeln
Datenschutz

Ich dachte jetzt das ich einfach die nicht benötigten Sachen rauslöschen kann:

<?php

if ($sustatus >= 5 && $modqueue > 0) {
    $menu[0][] = array('Mods', $u_board . '/mods', "current");
}
if ($sustatus >= 6) {
    $menu[0][] = array('Admin', $u_board . '/admin', "current");
}

$menu[1][] = array('Suche', $u_board . '/suche', "suchen-nav", "current");
$menu[1][] = array('Neue Beiträge', $u_board . '/neue-beitraege-1' . $rext, "current");

if ($sustatus < 2) {
    $menu[2][] = array('Registrieren', $u_board . $u_newdir . '/user', "current");
    $menu[2][] = array('Login', $u_board . '/login');
} else {
    $menu[2][] = array('Dein Account', $u_board . '/edit/user-' . $suid, "current");
    $menu[2][] = array('Logout', $u_board . '/logout', "current");
}

$menu[3][] = array('Regeln', $u_board . '/info/regeln' . $rext, "current");
if ($u_impressum) {
    $menu[3][] = array('Impressum', $u_impressum, "current");
}
if ($u_privacy) {
    $menu[3][] = array('Datenschutz', $u_privacy, "current");
}

if ($u_home) {
    $menu[4][] = array($x_home, $u_home);
}

?>

Entstehender Quellcode:

<ul>
<li class="suchen-nav"><a href="/forum/suche">Suche</a>
<ul>
<li class="current"><a href="/forum/neue-beitraege-1">Neue Beiträge</a></li>
</ul>
</li>
<li class="current"><a href="/forum/new/user">Registrieren</a>
<ul>
<li><a href="/forum/login">Login</a></li>
</ul>
</li>
<li class="current"><a href="/forum/info/regeln">Regeln</a>
<ul>
<li class="current"><a href="/forum/info/datenschutz">Datenschutz</a></li>
</ul>
</li>
</ul>

Mit der Erkenntnis, dass nur Murks rauskommt, weil ich keine richtige Ahnung von PHP habe. Das Problem ist, wenn ich den Code so lasse wie er da oben ist, fehlen Listenelemente und allgemein ist die Liste dann ziemlich Schrott. Meine Frage wäre jetzt, ob es irgend wie möglich ist, das so zu schreiben, dass ich mit diesen Punkten eine ganz normale Liste ohne Unterpunkte und der Klassenfunktion bekomme.

Vielen Dank schonmal im Voraus und Entschuldigung fürs Nerven ^^

30.07.2011 19:21 | geändert: 30.07.2011 19:22

5 Jörg

Der Murks entsteht möglicherweise dadurch, dass $menu[0] fehlt.

Schmeiß mal die Index-Zahlen aus den Array-Variablen raus, dann sollte eine nicht-verschachtelte Liste bei rauskommen, die automatisch mit $menu[0] beginnt:

if ($sustatus >= 5 && $modqueue > 0) {
    $menu[][] = array('Mods', $u_board . '/mods', "current");
}
if ($sustatus >= 6) {
    $menu[][] = array('Admin', $u_board . '/admin', "current");
}

$menu[][] = array('Suche', $u_board . '/suche', "suchen-nav", "current");
$menu[][] = array('Neue Beiträge', $u_board . '/neue-beitraege-1' . $rext, "current");

/* und so weiter */

30.07.2011 20:05 | geändert: 30.07.2011 20:05

6 tomathan

Funktioniert einwandfrei! Vielen Dank und ein großes Lob für die Forensoftware, deckt meinen Funktionsbedarf komplett ab lächel

30.07.2011 20:19

Nur Mitglieder können in diesem Forum Antworten schreiben.

Login | Registrieren