Saisonschalter mit CSS
Eine einfache Möglichkeit, um mehrere Content-Elemente saisonabhängig in verschiedenen Artikeln anzuzeigen.
Dazu reichen CSS und Contao Insert-Tags.
Im Seitenlayout als Body-Klasse diesen Insert-Tag eintragen:
month{{date::m}}
Das gibt aktuell <body class="month10"> aus.
Man kann die Body-Klasse auch im Twig-Template eintragen:
{# templates/fe_page.html.twig #}
{% extends '@Contao/fe_page' %}
{# Ergänzt die Body-Klasse mit month+aktueller Monat(z.B. month01 #}
{% set class = class ~ ' ' ~ 'month' ~ time|date("m") %}
Die Inhaltselemente erhalten, je nachdem wann sie angezeigt werden sollen, die CSS-Klassen: spring, summer, autumn oder winter.
Ich nutze terminal42/contao-node, um die saisonabhängigen Inhalte zu pflegen und platziere sie in der Seite mit:
{{insert_node::15}}
Frühling
Dieser Inhalt wird im Frühling angezeigt und danach versteckt.
Body-Klasse: month10
Element-Klasse: spring
Sommer
Dieser Inhalt wird im Sommer angezeigt und danach versteckt.
Body-Klasse: month10
Element-Klasse: summer
CSS
/* Season switch */
.spring,
.summer,
.autumn,
.winter {
display: none;
}
.month03 .spring,
.month04 .spring,
.month05 .spring {
display: block;
}
.month06 .summer,
.month07 .summer,
.month08 .summer {
display: block;
}
.month09 .autumn,
.month10 .autumn,
.month11 .autumn {
display: block;
}
.month12 .winter,
.month01 .winter,
.month02 .winter {
display: block;
}
Zeitsteuerung nach Öffnungszeiten
Zeigt während der Öffnungszeiten ein Inhaltselement an und ein anderes, wenn geschlossen ist.
Benötigt wird templates/theme/js_openclosed.html5 und ein bisschen CSS.
Per Javascript werden je nach Öffnungszeiten die Body-Klassen: 'open' oder 'closed' gesetzt.
Die anzuzeigenden Inhaltselemente, alternativ auch einzelne <HTML-Tags>, erhalten die Klassen: 'offen' bzw. 'geschlossen'.
Öffnungszeiten:
| MO - FR | 09:30-13:00 Uhr | 14:00-16:00 Uhr |
|---|---|---|
| SA | 10:00-12:30 Uhr | |
| SO | geschlossen |
Freitag,
Wir haben geöffnet
Wird nur während der Öffnungszeiten angezeigt.
Wir haben geschlossen
Wird nur außerhalb der Öffnungszeiten angezeigt.
templates/theme/js_openclosed.html5
<script>
(function () {
var d = new Date();
var day = d.getDay();
var hours = d.getHours();
var minutes = d.getMinutes();
if (day >= 1 && day <= 5) { // MO(1) - FR(5)
if ((hours == 9 && minutes >= 30 || hours > 9 && hours < 13) || (hours >= 14 && hours < 16)) {
document.body.classList.add('open');
} else {
document.body.classList.add('closed');
}
} else if (day == 6) { // SA(6)
if (hours >= 10 && (hours == 12 && minutes < 30 || hours < 12)) {
document.body.classList.add('open');
} else {
document.body.classList.add('closed');
}
} else { // SO(0)
document.body.classList.add('closed');
}
})();
</script>
CSS
.offen,
.geschlossen {
display: none;
}
.open .offen,
.closed .geschlossen {
display: block;
}