Das joomlaeigene Modul Zufallsbild (mod_random_image) zeigt ein einzelnes Bild aus einem Ordner an. Wie der Name schon sagt, zufällig irgendeins. Mit einem einfach zu erstellenden Template-Override kann man es dazu bewegen tageweise (nach Datum) ein bestimmtes Bild anzuzeigen oder nach Kalendertag, Tag des Monats, Tag des Jahres, nach Monat usw. usf..

Was tut der Override?

Das Modul Zufallsbild tut zuvor seine Arbeit wie gehabt. Es sucht aus einem Verzeichnis alle Bilder zusammen wie von Ihnen im Modul im Backend eingestellt. Aus dieser Sammlung pickt es sich dann zufällig eines raus. Damit ist gewährleistet, dass jedenfalls immer ein Bild angezeigt wird und unser Modul nicht leer bleibt.

Außerdem hilfreich für uns, dass das Modul alle anderen gefundenen Bilder "weiterreicht" (als Array $images) und diesbzgl. nichts mehr für uns zu tun ist.

Der hier vorgestellte Template-Override, den Sie am Ende dieses Beitrags fertig herunterladen können und den ich bydate.php genannt habe, sucht in den gefundenen Biildern nach Dateinamen, die mit dem aktuellen Datum beginnen. Wenn es eines findet, wird das Zufallsbild "in die Tonne geklopft" und stattdessen das Datumsbild angezeigt.

Template-Override für Modul Zufallsbild

Variante 1: Modul-Override händisch / selbst erstellen - Kopieren > Umbenennen

Erstellen Sie in Ihrem Template, ich verwende im Beispiel das Template namens Protostar einen neuen Ordner mod_random_image, falls noch nicht vorhanden

/templates/protostar/html/mod_random_image/

Zielordner fuer Modul-Override im Templateverzeichnis anlegen

Öffnen Sie den Ordner

/modules/mod_random_image/tmpl/

und kopieren Sie die darin befindliche Datei default.php

Zu kopierende Modul-Core-Datei default.php

in den oben neu angelegten Override-Ordner im templates-Verzeichnis.

Benennen Sie diese kopierte, neue Datei nun um: bydate.php. Sie können beliebig benennen. Empfohlen ist Kleinschrift, keine Leerzeichen, Umlaute, Sonderzeichen etc.

Template-Override des Moduls als Alternatives Layout

Durch das Kopieren haben wir einen Template-Override für Module erstellt. Durch das Umbenennen ein so genanntes Alternatives Layout.

Abschließend ersetzen Sie den Code in der Datei bydate.php durch diesen hier:

<?php
defined('_JEXEC') or die;

$comparisonFormat = 'Ymd'; // Jahr, Monat, Tag
$now = JFactory::getDate(time(), 'UTC');
$now = $now->format($comparisonFormat); // z.B. 20160106
foreach ($images as $img)
{
 if (strpos($img->name, $now) === 0)
 {
  $image = $img;
  break;
 }
}
?>
<div class="random-image<?php echo $moduleclass_sfx ?>">
<?php if ($link) : ?>
<a href="/<?php echo $link; ?>">
<?php endif; ?>
 <?php echo JHtml::_('image', $image->folder . '/' . $image->name, $image->name); ?>
<?php if ($link) : ?>
</a>
<?php endif; ?>
</div>

Wer aufgepasst hat, wird feststellen, dass man auch einfach eine neue, leere Datei bydate.php hätte anlegen können und den Code reinkopieren. Für Anfänger wollte ich aber zeigen wie einfach letztlich Joomla-Overrides anzulegen sind, vor denen viel zu viele Schiss haben. Hätte man die Datei default.php nach Kopieren nicht umbenannt, würde das Modul für die Ausgabe im Normalfall diese nehmen statt die moduleigene default.php. Also für Fälle gut geeignet, wo man für das Template IMMER eine selbst bearbeitete Ausgabe des Zufallsbildes haben möchte. Macht man einen Fehler im Override, kann man ihn einfach löschen und alles ist wieder gut und Joomla macht wieder "sein Ding". Da geht nix kaputt.

Da wir zusätzlich ein Alternatives Modul-Layout verwenden wegen des Umbenennens, passiert erst mal gar nichts bei der Modulausgabe. Es wird weiterhin die moduleigene default.php für Ausgabe verwendet. Man kann so das Modul sowohl wie gehabt nutzen (echtes Zufallsbild), aber für Sonderfälle parallel das Alternative Layout nutzen. Man kann beliebig viele eigene Layouts anlegen, also mehrere Dateien mit unterschiedlichstem Code im Template-Override-Ordner, verschieden benannt.

Variante 2: Modul-Override herunterladen und in Override-Verzeichnis kopieren

Empfohlen auch für die Fälle, wo Variante 1 zu Fehlern führt, weil beispielsweise ein ungeeigneter Editor verwendet wurde.

Zip-Datei am Ende des Artikels downloaden, entpacken und Datei bydate.php in den Template-Override-Ordner

/templates/protostar/html/mod_random_image/

kopieren. In meinem Pfad-Beispiel das protostar-Template.

Template Override des Moduls als Alternatives Layout

Modul anlegen

Legen Sie im Joomla-Backend ein neues Modul vom Typ Zufallsbild an. Wählen Sie eine Position, Titel eingeben.

Im Feld Bildverzeichnis den Pfad zum zu durchsuchenden Bilder-Ordner, der normalerweise ein Unterordner des Joomla-images-Verzeichnis ist. Ich habe mich für den Ordner banners entschieden, also trage ich ohne führenden und schließenden Schrägstrich ein:

images/banners

Wichtig: Im Feld Alternatives Layout das Modullayout bydate wählen.

Alternatives Modullayout bydate selektieren

Falls sich im Ordner passende Bilder befinden (siehe Feld Bildtyp, also Dateiendung, was bei mir jpg ist) und nicht zufällig eines, das mit heutigem Datum beginnt, wird das Modul Zufallsbilder anzeigen.

Bilder anlegen

Ich sage mal heute ist der 9. Januar 2015. Im Format Ymd geschrieben (siehe Zeile 4 des obigen Codes) ergibt sich daraus der Bildernamen-Prefix 20150109.

Also kopiere ich ein Bild 20150109.jpg in den Bilderordner. Nach dem EINLEITENDEN 20150109 darf gerne weiterer, beschreibender Text folgen.

Dieses Bild wird jetzt im Modul so lange angezeigt bis der 9. Januar 2015 vorbei ist. Am 10.1. wird dann das Bild 20150110.jpg gezeigt, falls es vorhanden ist. Usw. usf.

Andere Datumsformate? Andere Intervalle?

Möchte man seine Fotos lieber so benennen: 2015-01-09_irgendein-text.jpg, ändert man einfach Zeile 4 des Codes in

$comparisonFormat = 'Y-m-d';

Oder ein Bild pro Monat im Jahr und auch in den Folgejahren: z.B. 01_irgendein-text.jpg für den Januar:

$comparisonFormat = 'm';

An jedem Wochentag ein anderes Bild? Hier muss man wissen, dass 0 für Sonntag steht und 6 für Samstag. Ein Bsp. für mittwochs ist demnach: 3-irgendein-text.jpg

$comparisonFormat = 'w';

Viele weitere, mögliche Formate finden Sie im PHP-Manual.