[gelöst] Banner ändern, je nach angezeigter Seite
![](http://www.drupalcenter.de/files/noavatar_mini.gif)
am 09.04.2011 - 17:47 Uhr in
Hallo und einen schönen Abend Euch allen.
Ich habe einen Block erstellt in dem ich folgenden PHP-Code hinzugefügt habe:
<?php $banner = rand(1,5); ?>
<?php if ($banner == 1): ?>
<p><img src="../sites/all/themes/codab/img/header1.gif"><p>
<?php endif;?>
<?php if ($banner == 2): ?>
<p><img src="../sites/all/themes/codab/img/header2.gif"><p>
<?php endif;?>
<?php if ($banner == 3): ?>
<p><img src="../sites/all/themes/codab/img/header3.gif"><p>
<?php endif;?>
<?php if ($banner == 4): ?>
<p><img src="../sites/all/themes/codab/img/header4.gif"><p>
<?php endif;?>
<?php if ($banner == 5): ?>
<p><img src="../sites/all/themes/codab/img/header5.gif"><p>
<?php endif;?>
Soweit funktioniert das auch super.
Nun würde ich das ganze aber nicht dem Zufall überlassen wollen, sondern je nach Menüpunkt, also dem Titel der jeweiligen Seite, ändern lassen.
Hatte hier auch schon im Forum gesucht und evtl. Möglichkeiten via 'if ($breadcrumb == "Home") etc. ausprobiert, aber irgendwas habe ich da sicherlich nicht bedacht bzw. vergessen. Denn da passiert gar nichts.
Kann mir jemand Unterstützung anbieten?
Vielen Dank und beste Grüße
codab
- Anmelden oder Registrieren um Kommentare zu schreiben
hi codab! ich würde das ohne
am 09.04.2011 - 18:46 Uhr
hi codab!
ich würde das ohne php lösen.
mach einfach einen inhaltstyp banner, der aus dem titel und dem bannerbild besteht (mit cck und imagefield). den body braucht man nicht.
den titel wählst du entspechend der seite, die diesen banner zeigen soll.
dann einen view für diese banner-nodes bauen. einen einzelnen davon in einem block-display anzeigen und mit einem argument den entsprechenden banner rausholen (einfach den seiten-titel als argument auf banner-titel mappen).
so geht das ohne code und das ganze bleibt vor allem ziemlich flexibel, wenn mehr seiten und mehr banner dazukommmen.
hope this helps
lg
jd
Hey jd, schon mal vielen Dank
am 09.04.2011 - 20:51 Uhr
Hey jd,
schon mal vielen Dank für die Alternative.
Hättest Du dennoch eine Idee, wie sich das mit meinem Vorschlag lösen lassen würde?
Es gibt nicht so sehr viele Seiten und Banner, somit schien mir das für eine einfache Möglichkeit und ich lerne ja auch gerne hinzu. ;-)
Vllt. hast Du ne Idee, wie es sich auch mit dem "kurzen" PHP-Code lösen lässt.
Beste Grüße
codab
wenn's dir erstmal nur drum
am 09.04.2011 - 21:06 Uhr
wenn's dir erstmal nur drum geht, den php-code zu kürzen oder einfacher zu machen (das mit den if's ist ein wenig sehr "zu fuss" ;-) ):
<?php
$banner_anzahl = 5; # bei mehr bannern hier im bedarfsfall ändern
$banner_nr = rand(1,$banner_anzahl);
print "<p><img src=\"../sites/all/themes/codab/img/header".$banner_nr.".gif\"><p>";
?>
lg
jd
Das ist sehr nett. Also mit
am 09.04.2011 - 23:32 Uhr
Das ist sehr nett. Also mit der Codierung kenne ich mich echt nicht so aus, aber das ist echt einleuchtend. Ist ja so in etwa wie Basic. :-D
Nee, also, was mir mehr am Herzen liegt, ist die Abfrage des Breadcrumbs oder des entsprechenden Seiten-Titels ( nicht der der Webseite, sondern der des ausgewählten Menüpunktes). Oder geht das gar nicht so in PHP, wie ich mir das vorstelle?
Eine Abfrage in der Form von "if ($breadcrumb == home) (then do) (else)" gibt es doch auch oder nicht?
Sorry für die Umständlichkeiten, aber man lernt ja nie aus.
Beste Grüße
codab
den seitentitel mit dem
am 10.04.2011 - 13:06 Uhr
den seitentitel mit dem breadcrumb oder per menu rauszuziehen geht auch, das ist richtig, ist aber komplizierter.
wenn du nur den seitentitel allein haben willst:
$node->title
lg
jd
active trail
am 10.04.2011 - 18:25 Uhr
Hallo.
Direkt den aktuellen Breadcrumb könntest Du über [api:menu_get_active_breadcrumb:7] abfragen. Da das jedoch schon eine Liste mit fertig gerenderten Links zurückgibt, ist diese Funktion für Dein Vorhaben eher nicht zu gebrauchen.
Besser sieht es da schon mit [api:menu_get_active_trail:7] aus.
<?php
function get_image_by_active_menu_title() {
$active_trail = menu_get_active_trail();
$end = end($active_trail);
// Define images for specific menu titles.
$images = array(
t('Home') => 'home',
t('Dingens') => 'irgendwas',
t('Guestbook') => 'irgendwas',
t('Imprint') => 'imprint',
);
// Get image name for current title (or "default" if title is unknown).
$image_name = isset($images[$end['title']]) ? $images[$end['title']] : 'default';
return theme('image', array(
'path' => drupal_get_path('theme', 'THEMENAME') . '/images/' . $image_name . '.png',
'alt' => $image_name,
));
}
// Print current image.
print get_image_by_active_menu_title();
?>
Ungetestet, sollte jedoch funktionieren.
Stefan
Erstmal ganz einfach geloest
am 11.04.2011 - 14:46 Uhr
Danke fuer die Anregungen!
Werde mir das noch mal genauer ansehen, moechte aber meine kurze nicht ganz so schoene Loesung dennoch mal hier ablegen.
<?php
if (file_exists(DRUPAL_ROOT . '/' . $directory . '/img/'.$title.'.gif')) {
print "<p><img src=\"".$directory."/img/".$title.".gif\"><p>";
} else {
print "<p><img src=\"".$directory."/img/banner.gif\"><p>";
}
?>
Sobald sich ein Banner-Bild im Theme-Verzeichnis unter IMG befindet, welches den gleichen Namen traegt, wie der Titel der Seite lautet, wird dieses angezeigt.
Wie gesagt, nicht wirklich schoene Loesung, aber es funktioniert.
Besten Dank noch einmal.
LG
codab