aktuelle seite im code festlegen
am 02.04.2008 - 10:25 Uhr in
Hallo zusammen,
ich habe mich soeben auf dieser Seite angemeldet, weil ich zum ersten Mal seit ich Drupal benutze, ein Problem habe, für das ich partout keine Lösung finde. Alles Nachdenken, Dateien lesen und googeln hilft nicht ... :-(( Ich bin mit meinem Latein echt am Ende.
Mein Problem - von dem ich eigentlich nicht dachte, dass es eines werden würde - gestaltet sich wie folgt:
Ich habe einen "Pseudo-Breadcrumb" erstellt, der so aussieht:
Startseite | Inhalt 1 | Inhalt 2 | Inhalt 3 | Inhalt 4 | Inhalt 5
Dieser Pseudo-Breadcrumb wird über einen Block in der Region content-top auf der Startseite ausgegeben, sowie auf den jeweiligen Seiten von Inhalt 1 - 5 ANSTELLE des normalen Drupal-Breadcrumbs (kleine Änderung in der page.tpl.php ;-) ).
Die Links von Inhalt 1 - 5 sind mit stinknormalem Seiteninhalt (node-type-page) hinterlegt.
"Gestylt" wird der Pseudo-Breadcrumb über (eigene) css(-Klassen). So kann ich z.B. auch erreichen, dass die einzelnen Links beim Drüberhovern bold werden.
Was ich jedoch nicht (bzw. nur für die Startseite) hinbekomme, ist, dass wenn ich auf einen Inhalt klicke und die entsprechende Seite aufgeht, dass dieser angeklickte Breadcrumb-Punkt dann bold BLEIBT.
Wie es vom Prinzip her (und wie gesagt für die Startseite) funktioniert, weiß ich, nämlich: Ich muss in der Verlinkung (a href) zusätzlich class=active einfügen, für den Fall, dass ich mich auf der entsprechenden Seite befinde. NUR: Wie lautet der (korrekte) code für die aktuell betrachtete Seite ??
Ich dachte zunächst, dass sei recht easy - und zwar über arg(0) und arg(1). Das funzt jedoch leider nicht (Fatal error). Nach zig anderen Versuchen habe ich mir dann überlegt, dass der Block ja "weiß", auf welchen Seiten er sich zeigen soll (nur auf den aufgelisteten Seiten - die habe ich ihm ja eingegeben), also muss er diese Informationen ja irgendwoher bekommen. Ich habe die entsprechende Stelle in der block-module-Datei auch gefunden (denke ich zumindest), nur leider verstehe ich sie nicht so, dass ich sie nutzen könnte. Ich weiß echt nicht mehr weiter.
Anbei nun mein code - vielleicht weiß jemand von euch, wie man es richtig macht.
<?php
print '<div class=pseudobread>';
if (drupal_is_front_page ()) { // ich befinde mich auf der Startseite
print '<div class=pseudobread-inhalt><a class=active href="http://localhost/bms">Startseite</a></div>';
}
else {
print '<div class=pseudobread-inhalt><a href="http://localhost/bms">Startseite</a></div>';
}
print '<div class=trennstrich>|</div>';
if ( -- ?? -- ) { // ich befinde mich auf der Seite von node/17
print '<div class=pseudobread-inhalt><a class=active href="http://localhost/bms/node/17">Inhalt 1</a></div>';
}
else {
print '<div class=pseudobread-inhalt><a href="http://localhost/bms/node/17">Inhalt 1</a></div>';
}
print '<div class=trennstrich>|</div>';
if ( -- ?? -- ) { // ich befinde mich auf der Seite von node/18
print '<div class=pseudobread-inhalt><a class=active href="http://localhost/bms/node/18">Inhalt 2</a></div>';
}
else {
print '<div class=pseudobread-inhalt><a href="http://localhost/bms/node/18">Inhalt 2</a></div>';
}
...
usw.
...
print '</div>';
?>Viele Grüße
fatamorgana764
- Anmelden oder Registrieren um Kommentare zu schreiben

Um interne Links
am 02.04.2008 - 10:42 Uhr
Um interne Links programmatisch auszugeben, benutzt Du am einfachsten die l()-Funktion: http://api.drupal.org/api/function/l/5
Die erzeugt dann auch automatisch einen a-Tag mit der CSS-Klasse "active", wenn sie auf der aktiven Seite aufgerufen wird und kuemmert sich auch um die Ausgabe von Clean URLs und URL-Aliases, wenn die aktiviert sind.
Danke für die schnelle Antwort
am 02.04.2008 - 11:50 Uhr
Hallo ugerhard,
vielen Dank für Deine schnelle Antwort. Leider hilft sie mir nicht weiter. Ich habe nämlich erst vor ca. 1/2 Jahr angefangen, mir php beizubringen und hab davon nicht wirklich ´ne Ahnung. Ich kann zwar viele vorhandene Dinge ändern, nur selbst z.B. functions erstellen, dazu bin ich leider nicht fähig.
Die Stelle in der common.inc, auf die Du verweist, an dieser bin ich stundenlang "hängengeblieben" - eben weil da ja auch das "active" vergeben wird. Ich hatte in einer älteren Drupal-Version, in der die Startseite noch nicht die active-Funktion hatte, diese dort eingefügt. Natürlich nach vorgefertigten Angaben in einem Drupal-Forum. DASS da Links "produziert werden, das war/ist mir klar, aber das ist auch schon alles. Was da genau passiert, wie es funzt ... null Ahnung. Absolut NULL.
Magst Du mir vielleicht auf die Sprünge helfen und mir einen Link erstellen bzw. einen Mustercode, für einen der Inhalt-Links?? Wenn ich das fertige Produkt sehe, dann begreife ich vielleicht auch das Prinzip (was mir sehr wichtig ist!).
Viele Grüße
fatamorgana764
Dein Beispiel von oben
am 02.04.2008 - 12:10 Uhr
Dein Beispiel von oben umgeschrieben, so dass die l()-Funktion verwendet wird, sähe so aus:
<?php
print '<div class=pseudobread>';
print '<div class=pseudobread-inhalt>' . l('Startseite', '<front>') . '</div>';
print '<div class=trennstrich>|</div>';
print '<div class=pseudobread-inhalt>' . l('Inhalt 1', 'node/17') . '</div>';
print '<div class=trennstrich>|</div>';
print '<div class=pseudobread-inhalt>' . l('Inhalt 2', 'node/18') . '</div>';
...
usw.
...
print '</div>';
?>
Die l()-Funktion übernimmt, wie gesagt, für Dich das komplette Erzeugen des Link-HTMLs inklusive Setzen der active-Klasse.
Lesbarer finde ich es übrigens (und so wird's auch normalerweise in den Drupal-Templates gehandhabt), wenn man das "statische" HTML aus dem PHP rauszieht, also folgendermaßen vorgeht:
<div class=pseudobread>
<div class=pseudobread-inhalt><?php print l('Startseite', '<front>'); ?></div>
<div class=trennstrich>|</div>
<div class=pseudobread-inhalt><?php print l('Inhalt 1', 'node/17'); ?></div>
<div class=trennstrich>|</div>
<div class=pseudobread-inhalt><?php print l('Inhalt 2', 'node/18'); ?></div>
...
usw.
...
</div>
Whow !!!
am 02.04.2008 - 12:54 Uhr
Danke, danke, danke !!! SO einfach ist das ??? Ich bin echt baff. Irgendwie hab ich da wohl doch was Grundlegendes noch nicht kapiert. Wenn nur die Tutorials, die es im Netz so gibt, ein wenig mehr auf meine Art zu Verstehen zugeschnitten wären ...
Die Schreibweise, das "statische" HTML aus dem PHP rauszuziehen, ist für mich sehr verwirrend, weil ich es anders "gelernt" habe. Ich tue mich extrem schwer mit dem Lesen eines solchen Codes, aber wenn das Standard ist, dann werde ich mich umgewöhnen. Danke auch für diesen Tipp.
Liebe Grüße
fatamorgana764