 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
11.12.2004, 22:41
|
#1
|
|
TP-Veteran
Registriert seit: Mar 2004
|
Verschachtelte Listennavigation
So - habe ein wenig getüftelt - komme aber mal wieder nicht weiter. Wäre nett, wenn ihr mir noch ein wenig auf die Sprünge helfen könntet.
Ausgehend von Dennis' Listenscript hab ichs jetzt verlinkt und so umgeschrieben, dass da eine semantisch korrekt verschachtelte Liste rauskommt (das Ganze wird noch zwischen <ul> und </ul> inkludiert, so dass die äußeren hier fehlen - nicht wundern):
PHP-Code:
<?
// Hier wird die Navigation drin gespeichert!
$navigation = array
(
"punkt1" => array
(
"upunkt1a" => "punkt1-1",
"upunkt1b" => "punkt1-2"
),
"punkt2" => array
(
"upunkt2a" => "punkt2-1",
"upunkt2b" => "punkt2-2"
),
"punkt3" => "punkt3"
);
$selection = $_GET['section']; //ist so natürlich Quatsch - aber wie gehts richtig?
function draw_navi( $array, $selection )
{
foreach( $array as $name => $sub )
{
echo "<li>";
if( is_Array( $sub ) )
{
echo "<a href=\"index.php?section=$name\">$name</a>";
if( $selection == $name ):
echo "<ul>";
foreach( $sub as $sname => $ssub )
{
echo "<li><a href=\"index.php?section=$ssub\">$sname</a></li>";
}
echo "</ul>";
endif;
}else
echo "<a href=\"index.php?section=$name\">$name</a>";
echo "</li>";
}
}
draw_navi( $navigation, $selection );
?>
So - bleiben zwei Fragen:
- Was schreibe ich hier hin: $selection = $_GET['section'];
Wie also kann ich dem Server klarmachen, dass dort immer der 1. Wert des Hauptarrays hinsoll?
- tja, und wie deklarier ich jetzt noch den jeweils aktiven Menüpunkt mit einer extra-Klasse? Für eine einfache Liste hab ich das ja schon - bekomme das aber nicht in diese verschachtelte reingebaut...
Wär nett, wenn mir noch mal jemand weiterhelfen könnte...
__________________
Grüße, Terry
|
|
|
11.12.2004, 22:47
|
#2
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Ich komme aus dem Zauberwald
|
Zitat:
|
Was schreibe ich hier hin: $selection = $_GET['section'];
|
Ist doch richtig  Verschönern lässt sich das mit
$selection = isset( $_GET['section'] ) ? $_GET['section'] : 'home';
Zitat:
|
Wie also kann ich dem Server klarmachen, dass dort immer der 1. Wert des Hauptarrays hinsoll?
|
Der soll da gar nicht hin 
Du wolltest es ja so haben, dass nur die aktuelle Kathegorie offengeklappt wird. Mit $selection teilst du der Funktion also lediglich mit, welche Kathegorie der Navigation er öffnen soll!
__________________
Zwei Dinge sind Unbestreitbar:- In einem Land, in dem Amerika Krieg führt, herrscht nachher Demokratie.
- Die Erde ist eine Scheibe!
Aktuelle Abendlektüre: Stephen King, Peter Strauch: Das schwarze Haus (Black House, 2001)
Aktuelle Bewertung: Abgesehen davon, dass der Roman mal wieder demonstriert, dass der Author geistesgestört ist, sehr träge; wenig Spannung; schlechter Erzählstil. King halt^^!
|
|
|
11.12.2004, 22:51
|
#3
|
|
TP-Veteran
Registriert seit: Mar 2004
|
Ja, aber wenn ein Unterpunkt aufgerufen wird, dann erscheint der nicht mehr in der Navigation.
Der soll aber bleiben. Also:
punkt1
punkt2
unterpunkt2a
unterpunkt2b
punkt3
soll da auch dann stehen, wenn Unterpunkt 2a angeklickt wurde.
__________________
Grüße, Terry
|
|
|
11.12.2004, 22:57
|
#4
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Ich komme aus dem Zauberwald
|
du sollst den unterpunkt ja auch mit index.php?section=hauptgruppe&untergruppe=trallala aufrufen 
__________________
Zwei Dinge sind Unbestreitbar:- In einem Land, in dem Amerika Krieg führt, herrscht nachher Demokratie.
- Die Erde ist eine Scheibe!
Aktuelle Abendlektüre: Stephen King, Peter Strauch: Das schwarze Haus (Black House, 2001)
Aktuelle Bewertung: Abgesehen davon, dass der Roman mal wieder demonstriert, dass der Author geistesgestört ist, sehr träge; wenig Spannung; schlechter Erzählstil. King halt^^!
|
|
|
11.12.2004, 23:03
|
#5
|
|
TP-Veteran
Registriert seit: Mar 2004
|
Gut - geht jetzt (hatte ich vorhin auch schon mal probiert- aber da war dann noch ein anderer Fehler drin).
Vielen Dank Dir schon mal, Dennis.
Bleibt also noch das Markieren des aktiven Punktes - wie geh ich das jetzt noch an?
__________________
Grüße, Terry
|
|
|
11.12.2004, 23:22
|
#6
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Ich komme aus dem Zauberwald
|
per css?
ul li ul{
background-color: #f00000;
}
Oder du gibst dem Ding gleich nen Namen^^
__________________
Zwei Dinge sind Unbestreitbar:- In einem Land, in dem Amerika Krieg führt, herrscht nachher Demokratie.
- Die Erde ist eine Scheibe!
Aktuelle Abendlektüre: Stephen King, Peter Strauch: Das schwarze Haus (Black House, 2001)
Aktuelle Bewertung: Abgesehen davon, dass der Roman mal wieder demonstriert, dass der Author geistesgestört ist, sehr träge; wenig Spannung; schlechter Erzählstil. King halt^^!
|
|
|
11.12.2004, 23:29
|
#7
|
|
TP-Veteran
Registriert seit: Mar 2004
|
Mit ul ul li a kannst Du nur alle Unterpunkte gleichzeitig ansprechen - aber nicht den aktiven Punkt, auf dem Du Dich gerade befindest.
Idealerweise möchte ich folgendes:
Der aktive Punkt ist nicht klickbar, sondern ein einfacher Listenpunkt. Außerdem eben mit einer Klasse (class="active") versehen und mit title...
Müßte also schon per PHP-Script extra definiert werden.
Mit einer einfachen Liste geht es z.B. so:
PHP-Code:
$navigation= array (
"punkt1" =>"Punkt 1",
"punkt2" =>"Punkt 2",
"punkt3" =>"Punkt 3"
);
while(list($key, $val) = each($navigation)) {
if ($_GET['section'] == $key) { ?>
<li class="active" title="Hier bist Du gerade."><?php
echo $val
?></li>
<?php
} else {
?><li><a href="<?php
echo 'index.php?section='.$key .'">'. $val
?></a></li><?php
}
}
Nur wie wendet man sowas jetzt auf die verschachtelte Liste an?
__________________
Grüße, Terry
|
|
|
12.12.2004, 15:47
|
#8
|
|
TP-Veteran
Registriert seit: Mar 2004
|
Hmm...
ist das tatsächlich so schwierig oder stehe ich nur auf dem Schlauch?
__________________
Grüße, Terry
|
|
|
12.12.2004, 16:45
|
#9
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Ich komme aus dem Zauberwald
|
Du stehst vor dem Schau
Welche Variable ist bei dir denn für die Untergruppe zuständig?
__________________
Zwei Dinge sind Unbestreitbar:- In einem Land, in dem Amerika Krieg führt, herrscht nachher Demokratie.
- Die Erde ist eine Scheibe!
Aktuelle Abendlektüre: Stephen King, Peter Strauch: Das schwarze Haus (Black House, 2001)
Aktuelle Bewertung: Abgesehen davon, dass der Roman mal wieder demonstriert, dass der Author geistesgestört ist, sehr träge; wenig Spannung; schlechter Erzählstil. King halt^^!
|
|
|
12.12.2004, 16:59
|
#10
|
|
TP-Veteran
Registriert seit: Mar 2004
|
Die heißt dann art - wäre also $_GET['art'].
Nur ist die aktive Seite ja mal $_GET['section'] und falls vorhanden, dann $_GET['art'].
Hmm.. müßte man also abfragen, ob $_GET['art'] vorhanden ist.
Sowas in der Art?:
PHP-Code:
if ( isset ( $_GET['art'] ) )
{
echo "<li class="active" title="hier bist Du gerade">$sname</li>";
}
elseif (isset ( $_GET['section'] ) )
{
echo "<li class="active" title="hier bist Du gerade">$name</li>";
}
else ... //sollte ja eigentlich nicht vorkommen - was macht man da?
Wo kommt das dann hin? - wie muß ich sowas einschachteln?
__________________
Grüße, Terry
|
|
|
12.12.2004, 17:04
|
#11
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Ich komme aus dem Zauberwald
|
In der inneren Foreach Schleife - halt dort - wo die Untergruppe angezeigt wird!
__________________
Zwei Dinge sind Unbestreitbar:- In einem Land, in dem Amerika Krieg führt, herrscht nachher Demokratie.
- Die Erde ist eine Scheibe!
Aktuelle Abendlektüre: Stephen King, Peter Strauch: Das schwarze Haus (Black House, 2001)
Aktuelle Bewertung: Abgesehen davon, dass der Roman mal wieder demonstriert, dass der Author geistesgestört ist, sehr träge; wenig Spannung; schlechter Erzählstil. King halt^^!
|
|
|
12.12.2004, 17:15
|
#12
|
|
TP-Veteran
Registriert seit: Mar 2004
|
So - jetzt sieht es so aus:
PHP-Code:
<?
// Hier wird die Navigation drin gespeichert!
$navigation = array
(
"punkt1" => array
(
"upunkt1a" => "upunkt1a",
"upunkt1b" => "upunkt1b"
),
"punkt2" => array
(
"upunkt2a" => "punkt2-1",
"upunkt2b" => "punkt2-2"
),
"punkt3" => "punkt3"
);
$selection = isset( $_GET['section'] ) ? $_GET['section'] : 'home';
function draw_navi( $array, $selection )
{
foreach( $array as $name => $sub )
{
echo "<li>";
if( is_Array( $sub ) )
{
echo "<a href=\"index.php?section=$name\">$name</a>";
if( $selection == $name ):
echo "<ul>";
foreach( $sub as $sname => $ssub )
if ( isset ( $_GET['art'] ) )
{
echo "<li class=\"active\" title=\"hier bist Du gerade\">$sname</li>";
}
/* elseif (isset ( $_GET['section'] ) )
{
echo "<li class=\"active\" title=\"hier bist Du gerade\">$name</li>";
}*/
else
{
echo "<li><a href=\"index.php?section=$name&art=$ssub\">$sname</a></li>";
}
echo "</ul>";
endif;
}else
echo "<a href=\"index.php?section=$name\">$name</a>";
echo "</li>";
}
}
draw_navi( $navigation, $selection );
?>
Dabei werden leider beide Unterpunkte gleichzeitig ohne Link und mit class und title versehen. Und das auskommentierte geht an der Stelle gar nicht - da sonst die Unterpunkte nicht erscheinen.
Hmm.. wie jetzt weiter?
__________________
Grüße, Terry
|
|
|
12.12.2004, 17:23
|
#13
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Ich komme aus dem Zauberwald
|
http://php.net/isset
Das wird deine Frage beantworten! Isset überprüft nur, ob die Variable existiert. Das trifft ja keinerlei Aussage darüber, welchen Link er jetzt "highlighten" soll!
du brauchst ja wenn schon sowas alla
isset( $_GET["art"] ) && $_GET["art"] == aktuellePositionInDerNavigation
__________________
Zwei Dinge sind Unbestreitbar:- In einem Land, in dem Amerika Krieg führt, herrscht nachher Demokratie.
- Die Erde ist eine Scheibe!
Aktuelle Abendlektüre: Stephen King, Peter Strauch: Das schwarze Haus (Black House, 2001)
Aktuelle Bewertung: Abgesehen davon, dass der Roman mal wieder demonstriert, dass der Author geistesgestört ist, sehr träge; wenig Spannung; schlechter Erzählstil. King halt^^!
|
|
|
12.12.2004, 17:32
|
#14
|
|
TP-Veteran
Registriert seit: Mar 2004
|
Ja, das leuchtet ein.
Ich hab jetzt sowas probiert, aber das geht auch nicht:
PHP-Code:
if (isset( $_GET["art"] ) && $_GET["art"] == $sname)
Wie kann ich die aktuelle Seite definieren?
__________________
Grüße, Terry
|
|
|
12.12.2004, 17:44
|
#15
|
|
Guest
Registriert seit: Aug 2002
|
Ich störe zwar ungern, aber das ist in meinen Augen ein Spaghetti Code. Der ist kompliziert und nicht wiederverwendbar. Weshalb hat man denn OOP erfunden? Eine kleine Klasse mit Methoden für das Updaten und Anlegen so einer Liste inkl. der zusätzlichen Infos und Indexen aus dezimalen Zahlen, womit man auch besser rechnen kann wäre viel übersichtlicher und würde sogar einen ungeduldigen Coder befriedigen. Bei jeder kleinen Änderung muss in diesem Fall damit gerechnet werden, dass die ganze Arbeit umsonst war und man die Hälfte umschreiben muss. Also nei, so macht man sich nur eine zusätzliche Arbeit.
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
| |