WebsiteBaker Community Forum

WebsiteBaker Support (2.13.x) => General Help & Support => Topic started by: gurkenhals on December 18, 2020, 05:47:41 PM

Title: PHP-Termin-Skript
Post by: gurkenhals on December 18, 2020, 05:47:41 PM
Moin allerseits!

Seit etlichen Jahren nutze ich ein PHP-Script zu Erzeugung einer Termin-Liste. Nun plötzlich wird bei der Erzeugung einer neuen Liste für 2021 die Sortierung nicht mehr richtig dargestellt. Kann das an den Servereinstellungen (PHP-Version:7.4.13) oder an den Zeit-Einstellungen im WB (2.12.2 r379) liegen?
Das gleiche Script zeigt unter https://liederstube.de/pages/termine-2020.php (https://liederstube.de/pages/termine-2020.php) eine ordentliche Darstellung, auf https://liederstube.de/pages/termine-2021.php (https://liederstube.de/pages/termine-2021.php) jedoch nicht mehr. Über Hinweise wäre ich sehr dankbar!  (Y)

Code: [Select]
<?php // Hier nichts verändern !
 
// Hilfsfunktion zum Befüllen des Dateninhalts. 
function generateContent(&$dataArray, &$output, &$startCounter$num$dateUntilBreak){
    
// liste beginnt
    
$output .= '<ul class="termine">';
    for  (; 
$startCounter $num$startCounter++) {
        
// Vergleiche das Datum, um die Weichnachtskonzerte extra hervorheben zu können.     
        
if(strtotime($dataArray[$startCounter][0]) >= strtotime($dateUntilBreak->format('Y-m-d H:i'))){
            break;
        }
        
// Leider steht das "Uhr" in dem zweiten Arrayteil. Daher muss ich hier ein bisschen tricksen 
        
$concertDate strftime("%d. %B %Y, %H:%M"strtotime($dataArray[$startCounter][0]));
        
$concertTitle str_replace("Uhr, """stripslashes($dataArray[$startCounter][1]));
        
$concertPlace stripslashes($dataArray[$startCounter][2]);
        
$output .= '<li>'.$concertDate.' Uhr<br/>"'.$concertTitle.'"<br/>'.$concertPlace.'</li>';
    }
    
// Liste beenden
    
$output .= '</ul><p>&nbsp;</p>';
}
// Variable für den Dateninhalt
$sOutput '';
$sTitle '<h2>Konzert-Termine ';
// Lokale Variable für Deutsch ist
if (strtoupper(substr(PHP_OS03)) === 'WIN')
    
$localeCode 'ge';
else
    
$localeCode 'de_DE';
$loc_de setlocale (LC_ALL'de_DE@euro''de_DE''de''ge');
setlocale(LC_TIME,$loc_de);
// Datum mit Uhrzeit zum berechnen, welche Termine angezeigt werden
// Das aktuelle Jahr
 
$actualYear = new DateTime(strftime("%Y"strtotime(date("Y"))).'-01-01 00:00:00');

// Weihnachtsmonate für das aktuelle Jahr
$christmasDate = new DateTime(strftime("%Y"strtotime($actualYear->format('Y'))).'-12-01 00:00:00');

// date für das Nächste Jahr
$nextYear = new DateTime(strftime("%Y"strtotime($actualYear->format('Y'))).'-01-01 00:00:00');
$nextYear->modify("+1 year");

// date für das übernächste Jahr
$theYearAfterNext = new DateTime(strftime("%Y"strtotime($actualYear->format('Y'))).'-01-01 00:00:00');
$theYearAfterNext->modify("+2 year");

// Counter für die Anzahl an gelesenen Daten bzw. Zeilen
$count 0;
// Datei zum Lesen öffnen
$handle fopen ("https://liederstube.de/templates/findresp/Termine-2021.txt","r");
// Daten werden aus der Datei gelesen
while ( ($data fgetcsv ($handle1000";")) !== FALSE ) {
    
// Anzahl der Felder im Array $data      
    
$num count ($data);    
    
// Ablegen der Daten in der Form
    // ARRAY[Eintrag / Zeilenummer][Elemente(Zeit=0, Titel=1, Ort=2)]
    // Dabei ist die Grenze das aktuelle Jahr 
    
if(strtotime($data[0]) >= strtotime($actualYear->format('Y-m-d H:i'))){
        for (
$c=0$c $num$c++) {
            
$array[$count][$c] = $data[$c];
        } 
        
$count++;
    } 

fclose ($handle);
// Array noch sortieren, damit das Datum immer in der richtigen Reihenfolge steht
array_multisort($array);
// Titel setzen "Konzerte-Termine JAHR"
$sOutput .= $sTitle.strftime("%Y"strtotime($actualYear->format('Y'))).'</h2><p>&nbsp;</p>';
// Jeden Eintrag bearbeiten
$c=0;
// Datenerstellen bis zur Weihnachtszeit
generateContent($array$sOutput$c$count$christmasDate);
// Es sind noch Daten zu verarbeiten für die aktuelle Weichnachtszeit
if($c $count){
    
$sOutput .= '<h2>Weihnachtskonzerte</h2><p>&nbsp;</p>';
    
// Weihnachtszeit beginnt 
    
generateContent($array$sOutput$c$count$nextYear);
}
// Es sind noch Daten zu verarbeiten für das nächste Jahr
if($c $count){
    
// Titel setzen "Konzerte-Termine JAHR"
    
$sOutput .= $sTitle.$nextYear->format('Y').'</h2><p>&nbsp;</p>';
    
generateContent($array$sOutput$c$count$theYearAfterNext);
}
$sOutput str_replace("ä""&auml;"$sOutput);
$sOutput str_replace("Ä""&Auml;"$sOutput);
$sOutput str_replace("ö""&ouml;"$sOutput);
$sOutput str_replace("Ö""&Ouml;"$sOutput);
$sOutput str_replace("ü""&uuml;"$sOutput);
$sOutput str_replace("Ü""&Uuml;"$sOutput);
$sOutput str_replace("ß""&szlig;"$sOutput);

// Am Schluss wird die richtige Zeichenkodierung gesetzt
$sOutput iconv"Windows-1252""UTF-8"$sOutput );
print 
$sOutput;

edit:
code farbig gemacht (dbs)
Title: Re: PHP-Termin-Skript
Post by: dbs on December 18, 2020, 07:10:21 PM
Hi, interessante Sache.
Wenn du testweise die Termine von 2021 in der 2020.txt verwendest, dann klappt die Darstellung auch wie gewünscht.
Also oben Konzerttermine und ab Dez dann Weihnachtskonzerte.

Es könnte aber sein, dass ab 01.01.2021 die Reihenfolge stimmt.
Title: Re: PHP-Termin-Skript
Post by: gurkenhals on December 18, 2020, 07:37:08 PM
Hi,

die Logik verstehe ich nicht. Wenn ich die Termine von 21 in die 20 verschiebe, passt es? Warum? Und wenn ich die Termine aus 20 in die 2021.txt lege? Leider habe ich keine Testumgebung mit xampp, und die Aktualisierung der Neuansicht nach Änderungen im Live-Betrieb dauert viel zu lange, is'n Server von one.com.... Warum tritt dieses Phänomen erst jetzt auf...? Was aktualisiert wurde, ist WB und PHP. Du siehst schon, nur Fragen und keine Antworten...  :lol: Vielleicht warte ich also mal den 01. ab. Oder besser den 02.  :-D
Title: Re: PHP-Termin-Skript
Post by: dbs on December 18, 2020, 07:57:44 PM
Kann dir erstmal nur sagen, dass es mit WB 2.13 und PHP 7.4 genauso aussieht wie jetzt bei dir. Also 2020 gut und 2021 anders.
Vielleicht finde ich die Logik.
Title: Re: PHP-Termin-Skript
Post by: gurkenhals on January 01, 2021, 08:18:08 PM
Ok, Problem gelöst; alles wird ordentlich angezeigt!  :lol:
Ein frohes Neues euch allen!  (Y)
Title: Re: PHP-Termin-Skript
Post by: DarkViper on January 03, 2021, 08:31:05 PM
und was war die Lösung? (bin doch von Berufs wegen neugierig...  ;-))
Title: Re: PHP-Termin-Skript
Post by: gurkenhals on January 04, 2021, 07:53:02 PM
Die Lösung war, auf den 01.01.21 zu warten, um dann bestätigt zu sehen, dass das Script funktioniert, wie es funktionieren soll. Und das tut es nun. Allerdings bin ich der Ansicht, dass bislang die Termine für das nächste Jahr immer schon zum Ende des laufenden Jahres eingetragen wurden (nicht von mir, deshalb war ich mir in der Sache nicht ganz sicher) und es da nie Probleme gab.