Moin!
Sorry, dass ich erst so spät antworte, aber ich hab das gleiche Problem auf meiner Page heute noch lösen müssen und das war eher geringer Priorität. Genug Geschwafel, auf zur (vllt. etwas umständlichen, aber funktionierenden) Lösung:
Fangen wir mit der Funktion an, die für das Ein- und Ausblenden der DIVs verantwortlich ist. Ich habe leider den Urheber nicht mehr in meiner Linksammlung. Ergo, dies ist nicht auf meinem Mist gewachsen, aber ich finde sehr brauchbar:
HTML:
function toggleLayer( whichLayer )
{
var elem, vis;
if( document.getElementById ) // this is the way the standards work
elem = document.getElementById( whichLayer );
else if( document.all ) // this is the way old msie versions work
elem = document.all[whichLayer];
else if( document.layers ) // this is the way nn4 works
elem = document.layers[whichLayer];
vis = elem.style;
// if the style.display value is blank we try to figure it out here
if(vis.display==''&&elem.offsetWidth!=undefined&&elem.offsetHeight!=undefined)
vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'block':'none';
vis.display = (vis.display==''||vis.display=='block')?'none':'block';
}
Ich hoffe, dies bedarf keiner weiteren Erläuterung, ansonsten einfach fragen.
Die jeweilige Linkgruppe schlummert in einem DIV (in diesem Fall mit der ID "links_news") welches über die JS-Funktion toggleLayer(ID) ein- und ausgeblendet wird und jeweils mit einer Überschrift (<p>-Tag) versehen. Beim Klick auf die Überschrift wird das dadrunter liegende DIV geöffnet. Standardmäßig sind alle DIVs mit dem Style display:none; versehen.
Der HTML-Quellcode für eine Linksektion sieht folgendermaßen aus.
HTML:
<p class="menutitle" onclick="toggleLayer('links_news');">News</p>
<div id="links_news" class="menubody">
<a class="menu" href="index.php?p=news">» Übersicht</a><br />
<a class="menu" href="index.php?p=form_news">» Schreiben</a><br />
</div>
Die clientseitige Vorbereitung (HTML/JS) ist nun abgeschlossen. Das Problem ist nun, dass JavaScript ja gar nicht weiß, in welcher Linksection sich der User gerade befindet. Es findet nämlich keine Zuordnung zwischen Seite (Bsp. news.php) und der Linksection (hier dann: "links_news") statt.
Um dieses Problem zu beheben, habe ich die gesamten Seiten der Präsenz in einem PHP-Array namens $sitemap abgebildet. Dies sieht dann folgendermaßen aus:
PHP:
$sitemap = array("links_news" => array("news","form_news"),
"links_spielplan" => array("spielplan","form_spielplan"),
"links_gegner" => array("gegner","form_gegner"),
"links_forum" => array(),
"links_links" => array(),
"links_statistiken" => array(),
"links_einstellungen" => array("form_saison"));
Hier werden auf einfache Art und Weise die ganzen Seiten den jeweiligen Linksections zugeordnet. Die leeren Arrays bedeuten einfach, dass ich die Seiten noch nicht ausprogrammiert habe.
So... die Vorarbeit ist nun fertig. Sowohl das Auf- und Zuklappen der Layer funktioniert als auch eine Zuordnung der einzelnen Seiten zu den Linksections wurde vorgenommen.
An beliebiger Stelle (aber nachdem alle Link-DIVs erzeugt wurden) muss nun der folgende PHP-Snippet eingefügt werden:
PHP:
<?php
foreach ($sitemap as $linksection => $links) {
if (preg_match("/\d+/",array_search($_GET['p'], $links))) {
echo '<script language="javascript">';
echo 'if (document.getElementById(\''.$linksection.'\').style != \'block\') {';
echo ' toggleLayer(\''.$linksection.'\');';
echo '}';
echo '</script>';
}
}
?>
Selbiger durchläuft das Array $sitemap und sucht nach der gerade aufgerufenen Seite ("gespeichert" in _$GET['p']). Findet array_search() das Element wird die Funktion toggleLayer() aufgerufen, sofern das DIV noch
nicht sichtbar ist, um es einzublenden.
Ich musste preg_match() nutzen, weil die Rückgabe von array_search() sonst zuviel Probleme gemacht hat (s. auch
PHP Doku).
Bei Fragen, fragen!
HTH!