Trick gesucht
Encoder
- php
2 ChrisB0 bleicher0 hotti0 Malcolm Beck´s0 hotti0 Malcolm Beck´s0 hotti0 Malcolm Beck´s0 hotti
0 Gunnar Bittersmann
Hallo
Ich such einen eleganten Weg um in meiner Navigationsleiste genau einem Eintrag eine andere Klasse (für die Darstellung) zu geben. Sie wird von jeder Seite eingebunden. Beim Aufruf identifiziert sich die Seite und sorgt damit dafür, dass der jeweilige Link markiert wird.
Bisher mach ich folgende Sauerei.
function showMenu($page)
{
$marker = array();
$marker[$page] = "currentPage";
print <<<END
<p class="$marker[0]"><a>Startseite</a></p>
<p class="$marker[1]"><a>Seite 1</a></p>
<p class="$marker[2]"><a>Seite 2</a></p>
usw ...
END;
}
Das blöde ist nur, es wird dauernd auf nicht existente Elemente im Array zugegriffen und das erzeugt ja immer eine Warnung.
Wie kann man das denn schöner machen?
Ich könnte das Array komplett vorbelegen, aber vielleicht weiß ja jemand noch was ganz anderes?
Mit lauter if prüfen oder mir das heredoc (nowdoc?) mit mehr Code zerschießen, möcht ich nicht tun.
Hi,
Mit lauter if prüfen oder mir das heredoc (nowdoc?) mit mehr Code zerschießen, möcht ich nicht tun.
Nutze doch einfach eine Schleife zum Erstellen des Menüs.
MfG ChrisB
Grüße,
$seitenliste=Array(...);
$currentPage="Blümchen";
foreach($seitenliste as $name){
echo $out=$name!=$currentPage ? $name : "aie sind hier";
}
Irrtümer vorbehalten ich bin länger aus dem Thema raus >_<
MFG
bleicher
hi,
Wie kann man das denn schöner machen?
Mein BreadCrumb baue ich so:
// Das BreadCrumb Menu
$ha = $fa = explode(".", $folder);
$res = array(); // BreadCrumb Array
foreach($fa as $val){
$h = array_pop($ha);
$res[$h] = implode(".", $fa);
$ind = array_pop($fa);
}
$res = array_reverse($res,1);
// BreadCrumb haben wir
foreach($res as $k => $v){
$link = $res[$k];
$menlist[] = "<li class='nav'><a href='/$link.html' title='$link'>".$k."</a></li>";
}
Wobei $folder beispielsweise so lautet: Intern.Artikel.Perl.Codeschnippel
Also split am '.' bei mir.
Nicht eingebaut hab ich da bisher das Ausblenden (kein <a href>), falls das gewünscht ist, frage die Variable REQUEST_URI dazu ab. Da steht genau die Seite drin, die gerade aufgerufen ist.
Hotti
hi,
falls das gewünscht ist, frage die Variable REQUEST_URI dazu ab. Da steht genau die Seite drin, die gerade aufgerufen ist.
Nein, in REQUEST_URI steht die gesamte URI, also auch die $_GET
-Parameter.
Erstmal muss man sich überlegen, wie die Navigation aufgebaut sein soll, GET oder sprechende URIs, dann kann man sich weiter Gedanken machen.
mfg
hi,
falls das gewünscht ist, frage die Variable REQUEST_URI dazu ab. Da steht genau die Seite drin, die gerade aufgerufen ist.
Nein, in REQUEST_URI steht die gesamte URI, also auch die
$_GET
-Parameter.
Eben. Genau deswegen ja.
Hotti
hi,
falls das gewünscht ist, frage die Variable REQUEST_URI dazu ab. Da steht genau die Seite drin, die gerade aufgerufen ist.
Nein, in REQUEST_URI steht die gesamte URI, also auch die
$_GET
-Parameter.Eben. Genau deswegen ja.
Das bringt doch nichts, wenn du die Gesamte URI hast.
Nehmen wir an, ich rufe die Seite auf:
example.com/myscr.php?site=12;show=all
Willst du jetzt genau zu dieser URI einen bestimmten Content anzeigen, oder eher den Content für den Parameter „site“?
Ist ja gut möglich, dass der Parameter „show“ den Content der Seite leicht ändert. Mit REQUEST_URI müsste man alle Relevanten möglichkeiten der Parameter berücksichtigen, also (nur mal ein Simples Bsp.)
example.com/myscr.php?site=12;show=5
example.com/myscr.php?site=12;show=10
example.com/myscr.php?site=12;show=15
example.com/myscr.php?site=12;show=all
In all diesen Fällen müsste der richtige Content ausgegeben werden, der im Endeffekt mit dem Parameter „site“, „show“ oder dem Scriptname gefiltert werden könnte, statt REQUEST_URI.
mfg
hi,
falls das gewünscht ist, frage die Variable REQUEST_URI dazu ab. Da steht genau die Seite drin, die gerade aufgerufen ist.
Nein, in REQUEST_URI steht die gesamte URI, also auch die
$_GET
-Parameter.Eben. Genau deswegen ja.
Das bringt doch nichts, wenn du die Gesamte URI hast.
Nehmen wir an, ich rufe die Seite auf:example.com/myscr.php?site=12;show=all
Willst du jetzt genau zu dieser URI einen bestimmten Content anzeigen,
Mir ging es darum, den aufgerufenen URI(dentifier) aus der Linkliste (Navigation) auszublenden und genau das funktioniert exakt mit REQUEST_URI,
guck mal: http://rolfrost.de/cgi-bin/find.cgi
http://rolfrost.de/cgi-bin/find.cgi?query=aaaaaaaa&find=Suchen+und+Finden&mode=simple_text
sowie den Rest der Site. Bei meinen statischen HTML-Seiten wird dies bereits bei der Erstellung gemacht, da steht REQUEST_URI (as expected) in der Projektverwaltung.
Damit hat keine der Seiten einen Link auf sich selbst, was ja nicht nur die Suchmaschinen verwirren könnte sondern auch den Besucher.
Hotti
hi,
guck mal: http://rolfrost.de/cgi-bin/find.cgi
http://rolfrost.de/cgi-bin/find.cgi?query=aaaaaaaa&find=Suchen+und+Finden&mode=simple_text
Ich glaube, wir schreiben aneinander vorbei ;)
Der Link "suche" soll nicht verlinkt werden, egal was kommt -- das gilt auch für Parameter.
Damit hat keine der Seiten einen Link auf sich selbst,
In deinem Fall ist es wohl ansichtssache. Ich finde schon, dass die Seite auf sich selbst verlinkt, wenn Parameter an die URI drangehangen werden. Und dann stellt sich die Frage, warum?
Ich befinde mich ja weiterhin auf "find.cgi", warum wird die Seite wieder verlinkt, wenn Parameter dranhängen?
In diesem Falle verstehe ich natürlich, warum bei dir der Link wieder gesetzt wird -- damit man wieder auf die Default-Suchseite kommt, was auch durchaus Sinn machen kann. Es gibt aber fälle, wo es keinen Sinn macht, und diese überwiegen wohl in der Praxis.
mfg
hi,
Der Link "suche" soll nicht verlinkt werden, egal was kommt -- das gilt auch für Parameter.
Dann guck Dir die PHP Funktion parse_url() an.
Hotti
hi,
Der Link "suche" soll nicht verlinkt werden, egal was kommt -- das gilt auch für Parameter.
Dann guck Dir die PHP Funktion parse_url() an.
Die kenne ich schon -- aber, warum soll ich sie mir ansehen?
Ich "parse" meine "url" bereits auf meine Weise[1] :)
mfg
[1] Streng genommen auf dedlfix Weise
hi,
Der Link "suche" soll nicht verlinkt werden, egal was kommt -- das gilt auch für Parameter.
Dann guck Dir die PHP Funktion parse_url() an.
Die kenne ich schon -- aber, warum soll ich sie mir ansehen?
Genau. Und warum sollte ich auf einen benutzer- und suchmaschinenfreundlichen Link in meinem Hauptmenu verzichten, wo der Trick mit REQUEST_URI doch ganz einfach ist ;-)
Viele Grüße,
Horst Trickreich
hi,
Genau. Und warum sollte ich auf einen benutzer- und suchmaschinenfreundlichen Link in meinem Hauptmenu verzichten, wo der Trick mit REQUEST_URI doch ganz einfach ist ;-)
Mach's doch wie Google
hättste noch zusätzlich bissel Farbe auf deiner Seite :)
mfg
@@Encoder:
nuqneH
Beim Aufruf identifiziert sich die Seite und sorgt damit dafür, dass der jeweilige Link markiert wird.
Der Link sollte nicht markiert, sondern entfernt werden. „Verlinke niemals auf die aktuelle Seite.“ (Punkt 10 der zehn meist-missachteten Homepage-Design-Richtlinien [Nielsen])
<p class="$marker[0]"><a>Startseite</a></p>
Ich vermute kastrierte 'a'-Elemente, in Wirklichkeit haben sie @href-Attribute. Was spricht dagegen, deren @href-Werte jeweils mit dem URI der aktuellen Seite zu vergleichen?
Qapla'
Der Link sollte nicht markiert, sondern entfernt werden.
Ich möchte den Text schon da lassen wo er vorher auch war, nur vielleicht nicht mehr als Link und halt anders dargestellt. Sonst irritiert es find ich.
Ich vermute kastrierte 'a'-Elemente
Stimmt schon, das sollte halt möglichst unkompliziert auf das eigentliche Problem hinweisen ;-)
@@Encoder:
nuqneH
Der Link sollte nicht markiert, sondern entfernt werden.
Ich möchte den Text schon da lassen wo er vorher auch war
Ja, nicht den Text entfernen, sondern den Link (die Verlinkung des Textes).
nur vielleicht nicht mehr als Link und halt anders dargestellt.
/archiv/2009/9/t191084/#m1274263 > /archiv/2009/9/t190331/#m1268494
„es sind doch sicher 'li'-Elemente, oder?“
Markup fürs Menü auf Seite 1:
<ul id="menu">
<li><a href="/">Startseite</a></li>
<li>Seite 1</a>
<li><a href="/seite2">Seite 2</a></li>
</ul>
Qapla'