Hallo zusammen,
für eine Vereinswebseite suche ich eine ganz simple Terminanzeige für ein- und mehrtätige Events.
Es soll ein Modul mit dem nächsten Termin und eine Terminübersicht geben.
ich habe JEvents und iCagenda ausprobiert, wäre notfalls möglich aber viel zu overkill.
Vielleicht kennt ja jemand etwas schlankes.
Meine alte Lösung hat bisher mit J3 und PHP 7.4 immer prima funktioniert. Mag etwas "stump" sein, aber für meine Zwecke reicht es.
Ich habe eine Terminliste als txt. Ein Modul für den nächsten Termin auf der Startseite. Ein Modul für die Terminliste auf der Seite /termine.
12.03.2023|Sonntag, der 12. März 2023|Titel des Events am 12. März|<a href="termine">Alle Informationen erhalten Sie unter diesem Link</a>|Kurze Terminbeschreibung|
02.04.2023|Sonntag, der 02. April 2023|Titel des Events am 02. April|<a href="termine">Alle Informationen erhalten Sie unter diesem Link</a>|Kurze Terminbeschreibung|<a href="https://example.org/" target="_blank" rel="noopener noreferrer">Weitere Informationen finden Sie auf der Homepage des Veranstalters</a>.
02.07.2023|Samstag, der 01. Juli - Sonntag, der 02. Juli 2023|Titel des mehrtägigen Events|Es wird toll! <a href="interneeventseite">Alle Infos erhalten Sie unter diesem Link</a>.|<p><b>Absatz Fettschrift</p><p>Absatz 2</p><p>Absatz 3</p>
Spalte 0: Tag bis zu dem der Termin angezeigt werden soll, bei mehrtätigen Terminen der letzte Tag
Spalte 1: lange Datumsangabe (z.B. Sonntag, der 01.12.2000 oder Freitag, der 30.06. bis Montag, der 02.07.2000)
Spalte 2: Titel des Termins
Spalte 3: Kurze Beschreibung für Nächster Termin
Spalte 4: Lange Beschreibung für Terminliste
Spalte 5: Weiterer Absatz für Terminliste
<?php
defined('_JEXEC') or die;
// Für den Vergleich die Zeit auf 0 Uhr setzen
$today = new \DateTime();
$today->setTime(0, 0, 0);
// datei handle erzeugen
$fp = fopen("https://example.org/templates/TEMPLATE/html/mod_custom/termine.txt", "rb");
//
// solange man nicht am ende der Datei ist, eine Zeile einlesen
while($line = fgets($fp)) {
// die Zeile in Spalten aufteilen
$columns = explode("|", $line);
// Ein Datumsobjekt erzeugen (mit dem deutschen Format aus der Datei)
$date = \DateTime::createFromFormat('d.m.Y', $columns[0]);
// wenn Datum >= heute, gibs aus und brich die schleife ab
if($date >= $today) {
echo $columns[1]."</p><p>".$columns[2]."</p><p>".$columns[3]."</p>";
break;
}
}
if($date < $today) {
echo "Hier sind derzeit keine aktuellen Termine eingetragen."."</p><p>"."Bitte schauen Sie später wieder vorbei, vielen Dank!"."</p>";
}
?>
Alles anzeigen
<?php
defined('_JEXEC') or die;
// datei handle erzeugen
$termine = fopen("https://example.org/templates/TEMPLATE/html/mod_custom/termine.txt", "rb");
// solange man nicht am ende der Datei ist, eine Zeile einlesen
while($line = fgets($termine)) {
// die Zeile in Spalten aufteilen
$columns = explode("|", $line);
{
echo "<h4>".$columns[1]."</h4>"; // Datum lang
echo "\n";
echo "<h4>".$columns[2]."</h4>"; // Titel
echo "\n";
echo "<p>".$columns[4]."</p>\n"; //Beschreibung lang
echo "<p>".$columns[5]."</p><br/>\n"; //Weiterer Absatz
echo "<hr>\n<br />\n";
}
}
?>
Alles anzeigen
Ich erhalte die Fehlermeldung 0 fgets(): Argument #1 ($stream) must be of type resource, bool given
Leider bekomme ich es nicht hin das Script für J4 / PHP 8 anzupassen. Wenn dies gelingen würde, wäre das eine sehr schlanke Lösung. Bestenfalls die termine.txt als termine.php, damit man sie auch per defined('_JEXEC') or die;schützen kann.
Vielleicht hat jemand Lust das anzupassen.