online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon Frankchen vom 20.12.2020, 14:30 Options

Ich möchte den Menüpunkt, wo man sich gerade befindet, fett darstellen

Hi,

ich arbeite an einer Seite in PHP.

Die einzelnen Seiten sehen so aus:

index.php
linklist.php
about.php
...

In jede dieser Dateien wird per Include der Header, das Menü und der Footer integriert:


<?php
include ...
<?>

Inhalt

<?php
include ...
?>


Aus Bequemlichkeit habe ich eine globale menu.php und nicht in jeder Seite ein eigenes...denn dann wäre es ja einfach: Ich könnte auf jeder Seite, den Link des momentanen Aufenthaltes mit <b></b> fett machen.
Da ich aber nur eine menu.php habe, die in jede Seite includiert wird, muss ich per PHP irgendwie rausfinden, bei welchem Menüpunkt ich mich gerade aufhalte.

Wie mache ich soetwas?

THX!


Antwort schreiben

Antwort 1 von katy vom 21.12.2020, 09:08 Options

Hallo Frankchen,

mein Vorschlag: vor das erste include setzt du in jede Seite einfach deren Namen in eine Variable:
$aktuell='index.php';
und im Menü-Skript setzt du alle Linkziele in ein Array und fragst ab, ob das Linkziel der Variablen $aktuell entspricht. Falls ja ergibt es einen normalen Link, falls nein ergibt es sinnvollerweise keinen Link, denn Links auf die gerade aktuelle Seite sind überflüssig.

Einen schönen 4ten Advent

katy

Antwort 2 von Frankchen vom 21.12.2020, 12:44 Options

Hallo katy,

das ist ein super Tip, der eigentlich garnicht so kompliziert ist!

Aber eine kleine Frage dazu hätte ich noch:
Ich als jemand, der PHP nur notdürftig beherrscht und nur das nötigste kann, würde jetzt in jedem Link einzeln eine If-Abfrage machen und dann ggf. die <b></b> einfügen.

Aber es gibt doch bestimmt auch die Möglichkeit, eine einzige Funktion zu schreiben und dann via CSS zu bestimmen was fett soll und was nicht, oder?

Also prüfen, welche Variable gesetzt ist und dann irgendwie als class "menuset" festlegen...aber das ist schonwieder zu hoch für mich.

Das Menü selber ist ganz schlicht und sieht so aus:


	<div class="menu">
	<ul>
	<li><a href="" class="menu">Punkt 1</a></li>
	<li><a href="" class="menu">Punkt 2</a></li>
	<li><a href="" class="menu">Punkt 3</a></li>
	<li><a href="" class="menu">Punkt 4</a></li>
	<li><a href="" class="menu">Punkt 5</a></li>
	<li><a href="" class="menu">Punkt 6</a></li>
	</ul>
	</div>


Hat Du vielleicht einen Codeschnipsel für mich?

Danke für Deine Hilfe!

Antwort 3 von katy vom 21.12.2020, 16:58 Options

Hallo Frankchen,

hier gibt es ein gutes Beispiel: jeenaparadies.net

katy

Antwort 4 von Frankchen vom 21.12.2020, 17:38 Options

Danke katy!

Es funktioniert tatsächlich und ist garnichtmal soviel Code wie ich dachte.

Kennst Du Dich auch etwas mit CSS aus? Der akutelle Menüpunkt ist zwar angwählt, aber wird logischerweise nicht so formatiert wie die Links, weil ich in dem <a href.... ja das class="menu" drinstehen habe - was bei einem normalen Text ja nicht der Fall ist.

Das Script von Deinem Link gibt keine zwei unterschiedlichen Codes aus, sondern ergänzt oder entfernt bei Bedarf den <a href=""> und das </a>...

Antwort 5 von katy vom 21.12.2020, 22:17 Options

Hallo Frankchen,

angenommen du hast dein Menü eine id namens menue gegeben. Dazu reicht es ja an einer Stelle das Skript zu ändern von
$navi = "<ul>\n";
in
$navi = "<ul id='menue'>\n";

Dann kannst du im CSS auf alle Links innerhalb des Menü zugreifen über:

ul#menue a.link { ...}
ul#menue a.visited { ...}
usw.

Wenn du nun noch schreibst
ul#menue li {font-weight:bold};
ul#menue li a {font-weight:normal};

heißt das:
im Menü wird grundsätzlich fett geschrieben, ausgenommen Text innerhalb Links.
Da aber außer der aktuellen Seite alles innerhalb Links steht wird demzufolge lediglich die aktuelle Seite fett geschrieben.

katy

Antwort 6 von Frankchen vom 22.12.2020, 17:55 Options

Guten Abend katy,

vor einigen Jahren habe ich schoneinmal viel mit HTML und CSS gemacht, leider mit einigen Fehlern oder Programmierstilen, die heute nichtmehr gern gesehen sind wie z.B. Designs mit Tabellen oder Frames.

Damit ich nun eine Website für mich gestalten kann die valide ist, habe ich mir eine Designvorlage besorgt. Kurz: Ich bin nicht der Urvater meiner CSS-Datei und muss versuchen, mich dort hinein zu fuchsen.

Also ich versuche es einmal. Der Code für die Menügenerierung sieht aktuell so aus:


$menu_data = array(
 "punkt1"    => array("Punkt 1", "punkt1.php"),
 "punkt2"     => array("Punkt 2", "punkt2.php"),
 "punkt3"    => array("Punkt 3", "punkt3.php"),

 );
$navi = "<ul>\n";
 foreach ($menu_data as $key => $value) {
  $navi .= " <li>";
    if($key != $current_page) {
     $navi .= "<a href='".$value[1]."' class='menu'>";
    }
	else {
	$navi .= "<a href='".$value[1]."' class='menu'><b>";
	}
   $navi .= $value[0];
    if($key != $current_page) {
     $navi .= "</a>";
    }
	else {
	$navi .= "</b></a>";
	}
   $navi .= "</li>\n";
 }
$navi .= "</ul>";



Ich habe etwas geschummelt und in die If-Schleife ein Else mit eingebaut, damit ich provisorisch ruhig schlafen kann und es vorerst mit einem <b></b> so dargestellt wird wie ich es mir vorgestellt habe.

Jetzt also möchte ich es richtig machen und zwar mit CSS. Ist id und class dasselbe? Für das Design der Seite musste ich überall <div class=""> eingeben. Ein weiteres Problem ist, dass in der CSS-Datei auch Positions- und Abstandsangaben der Menüpunkte enthalten sind...also nicht nur die Linkfarbe.


.menu {
	float: left;
	width: 140px;
	margin: 4px;
	margin-top: 0px;
}
.menu ul, .menu li {
	margin: 0;
	padding: 0;
	list-style: none;
	margin-bottom: 4px;
}
.menu ul ul {
	padding-left: 4px;
}
.menu a:link, .menu a:visited, .menu a:active, .menu a:hover {
	display: block;
	padding: 0px;
}
.menu_default a:link, .menu_default a:visited, .menu_default a:active {
	border-bottom: 1px dashed #999999;
}
.menu_default a:hover {
	border-bottom: 1px dashed #333333;
}

.menu_current  {
	border-bottom: 1px dashed #999999;
	font-weight:bold;
}


Der passende Menüteil sieht so aus:

<div class="menu">
<?php echo $navi ?>
</div>


Auch hier gibt es eine Sache, die ich nicht verstehe.
.menu_current wird in der Menüdatei nirgendwo aufgerufen, weder als id, noch als class. Lösche ich diesen Eintrag in der CSS-Datei, verzieht sich jedoch mein Seitendesign obwohl er laut HTML nicht benötigt wird... daher finde ich gerade den roten Faden nicht, wie ich Deine Beispiele bei mir unterbringen kann.

Du hast mir schon sehr viel geholfen, dankeschön dafür!

Antwort 7 von katy vom 22.12.2020, 18:37 Options

Hallo Frankchen,

wie kommst dud arauf, jedem Link die class menu zu geben? Das ist vollkommen unsinnig weil überflüssig. Es reicht bei diesem CSS vollkommen, wenn dem übergeordneten Element (bei dir ein div) diese Klasse zugeordnet wird.

class und id sind ein himmelweiter Unterschied. Eine id darf nur einmal vorkommen. Elementen, die entsprechend einzig sind wie das Menü erhalten daher eine id, keine class. Denn class darf (und sollte) mehrfach vorkommen und dient der Gruppierung gleichartiger Elemente.

Ohne die Seite und den vollständigen Code zu kennen kann ich übrigens kaum Aussagen zu irgendwelchen HTML/CSS-Problemen machen. Außer das das CSS nicht so recht zu deinem HTML passt.

Wenn du die Änderungen so machst, wie in Antwort 5 von mir vorgeschlagen sollte aber alles wie gewünscht funktionieren, es sei denn in deinem CSS sind irgendwelche Ungereimtheiten.

katy

Antwort 8 von Frankchen vom 22.12.2020, 19:06 Options

Jetzt kommt langsam Licht in das Dunkel.

Ich habe jetzt alles nochmal angepasst und überprüft. Und das tolle daran ist, dass es nun einwandfrei funktioniert. Dabei habe ich es fast aufgegeben, es zu verstehen :-)

Genaugenommen ist es sogar besser geworden als ich ursprünglich wollte. Denn eigentlich wollte ich den aktiven Link lediglich fett machen und jetzt ist er gleichzeitig nichtmehr anklickbar und ein normaler Text.

Ich bin überaus zufrieden. Wie kann ich Dir danken? :-)

Viele liebe Grüße zu Dir katy.

Frankchen

Ähnliche Themen

Möchte Erweiterung für Script.
shorty066  10.10.2007 - 48 Hits - 2 Antworten

Möchte c++ können :-)
Illuminatum92  17.11.2007 - 72 Hits - 11 Antworten

Ich möchte ein programm installieren.
Deluxeboy  19.12.2007 - 107 Hits - 2 Antworten

xml-Datei auslesen und in tabelle darstellen
Reavermaster  21.07.2008 - 72 Hits - 7 Antworten

Möchte INF-Datei erstellen
KarleS  05.10.2008 - 98 Hits - 1 Antwort

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026