Während des Frühlings, Sommers, Herbst und Winters soll die Webseite optisch variiert werden. Oder innerhalb anderer selbst definierter Datums-Intervalle. Ein kurzes Joomla-Script hilft bei der Ermittlung der zugehörigen Periode anhand des aktuellen Datums. Am Beispiel eines Bildes, das ausgetauscht werden soll. Kann aber auch für Farb-Wechsel und anderes verwendet werden.

Der Beispiel-Code zur Ermittlung eines Jahrezeitenbildes kann letztlich überall in Joomla-PHP verwendet werden, Template-index.php, Overrides, Modulen etc.

Was will ich?

  • Eine Seite soll nach Datumsbereichen ein jeweils anderes Hintergrundbild bekommen. Beispielsweise soll vom 3.Januar bis 6.April ein Gockel angezeigt werden. Vom 7.April bis 11.August eine Henne usw.
  • Der Code soll einen Bildnamen passend zur Periode generieren, zu der das Heute-Datum gehört.

Der Code

Herunterladen am Ende des Artikels.

$jareszeiten = array(
'1221', // Beginn Nordwinter, 21.Dez
'0923', // Beginn Nordherbst, 23.Sep
'0621', // Beginn Nordsommer, 21.Jun
'0321', // Beginn Nordfruehling, 21.Mae
);

$comparisonFormat = 'md';

$now = JFactory::getDate(time(), 'UTC');
$now = $now->format($comparisonFormat);

$bild = '';

foreach ($jareszeiten as $jz)
{
 if ($now >= $jz)
 {
  $bild = $jz;
  break;
 }
}
if (!$bild)
{
 $bild = array_shift($jareszeiten);
}
$bild = $bild . '-jahreszeit.jpg';

Der Code im Einzelnen

Zeilen 1-6: In einem PHP-Array $jareszeiten wird das jeweilige Startdatum der verschiedenen Datums-Perioden definiert. Wichtig dabei ist für den Folgecode, dass dies in absteigender Sortierung passiert. Der Dezember zuoberst, der März zuletzt.

Das verwendete Format für diese Datumsangaben muss 4-stellig sein. Zuerst der Monat 2-stellig, dann der Tag, ebenfalls 2-stellig.

(Die Texte hinter den je 2 Schrägstrichen sind wirkungslose Kommentare. Sie können Sie samt Schrägstrichen entfernen.)

Zeile 8: Das Vergleichsformat nach dem PHP-Manual für die date()-Funktion wird festgelegt. m für 2-stelligen Monat. d für 2-stelligen Tag des Monats.

Zeile 10: Das Joomla-Framework wird aufgefordert, das aktuelle Datum zu ermitteln. Im Hintergrund wird dafür die Joomla-Klasse JDate verwendet. Die Rückgabe wird in Variable $now abgelegt für weitere Verwendung.

Zeile 11: Das aktuelle Datum ($now) wird nach unserer Format-Vorgabe $comparisonFormat 4-stellig formatiert. Im Hintergrund wird dafür die oben verlinkte PHP-Funktion date() verwendet.

Zeilen 15-22: Die im Array $jareszeiten eingegebenen Startdatums werden einzeln geprüft.

  • Zeile 17: Ist das aktuelle Datum größer als das geprüfte Startdatum? Dann befindet sich das Heute-Datum im gerade geprüften Datums-Intervall
  • Zeile 19: UND wir legen das gefundene Intervall in der Variablen $bild ab
  • Zeile 20: UND wir können (müssen sogar) die Suche abbrechen. Die foreach-Schleife wird mit einem break beendet.

Zeilen 23-26: Nehmen wir an, heute ist der 3. März. Das aktuelle Datum in Variable $now lautet also 0303. Problem: 0303 ist niemals größer als eines der festgelegten Startdatums. Wir befinden uns also in einem Intervall der ersten Peiode (1221), im Winter. Die Variable $bild bleibt leer innerhalb der foreach-Schleife.

Zeile 27: Da wir nun jedenfalls ein Intervall gefunden haben, bauen wir uns einen Bildnamen zusammen. Je nachdem erhalten wir den Bildnamen

  • 0321-jahreszeit.jpg für den Frühling
  • oder 0621-jahreszeit.jpg für den Sommer
  • oder 0923-jahreszeit.jpg für den Herbst
  • oder 1221-jahreszeit.jpg für den Winter.

Den Bildnamen kann man nun in folgendem PHP verwenden, bspw. in einem <style>...</style>-Block, um eine background-url dynamisch festzulegen oder in einem <img ... />-Tag im src-Attribut etc.

Crux

  • Der Code geht davon aus, dass das ganze Jahr mittels den eingegebenen Perioden abgedeckt ist. Lücken sind nicht vorgesehen ohne den Code zu erweitern. Geht aber mit etwas Denkarbeit auch.
  • Es kann zu stundenweisen Zeitverschiebungen kommen je nach Zeitzone. Dies ist ggf. in Zeile 10 des Codes zu berücksichtigen, die "plump" mit UTC arbeitet. Andere Baustelle, da zu komplex für dieses Kurz-Tutorial.

Ein Beispiel: Jahreszeitenbild per background-image

Gerenderte Ausgabe der Datei jahreszeitenbild.php

Ein Jahreszeitenbild als Hintergrundbild

Aktuelles Hintergrundbild: /images/jahreszeiten/0321-jahreszeit.jpg

Quelltext der Datei jahreszeitenbild.php

<?php
defined('_JEXEC') or die;
?>
<?php
/**
 * @package Code snippet for Joomla
 * @link ghsvs.de/programmierer-schnipsel/joomla/166-jahreszeit-bzw-datumsbereich-bestimmen
 */
?>
<?php
$jareszeiten = array(
'1221', // Beginn Nordwinter, 21.Dez
'0923', // Beginn Nordherbst, 23.Sep
'0621', // Beginn Nordsommer, 21.Jun
'0321', // Beginn Nordfruehling, 21.Mae
);

$comparisonFormat = 'md';

$now = JFactory::getDate(time(), 'UTC');
$now = $now->format($comparisonFormat);

$bild = '';

foreach ($jareszeiten as $jz)
{
 if ($now >= $jz)
 {
  $bild = $jz;
  break;
 }
}
if (!$bild)
{
 $bild = array_shift($jareszeiten);
}
$bild = $bild . '-jahreszeit.jpg';
?>

<h4>Ein Jahreszeitenbild als Hintergrundbild</h4>

<div class="div4jahreszeit"></div>
<p>Aktuelles Hintergrundbild: <?php echo JUri::root(true); ?>/images/jahreszeiten/<?php echo $bild; ?></p>
<style>
 .div4jahreszeit{
  background-image: url("<?php echo JUri::root(true); ?>/images/jahreszeiten/<?php echo $bild; ?>");
  
  width: 250px;
  height: 250px;
 }
</style>