[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Brauche Hilfe: Zeitschaltung - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
dpf_dd
Beiträge: 151
Registriert: 20. Dez 2007, 14:07

Brauche Hilfe: Zeitschaltung

3. Dez 2015, 15:45

Hallo Community,

ich brauche dringend Hilfe mangels eigener Kompetenz :roll:

Ich nutze folgendes AddOn zum zeitschalten von einzelnen Slices:
Slice Publish Date

Ein Superteil, funktioniert tadellos.
Ich habe jetzt aber die Aufgabe, diesem AddOn neben dem Datum noch die Uhrzeit mitzugeben, sodass ich nicht nur tageweise zeitschalten kann, sondern stündlich bzw. sogar minütlich...

Dazu habe ich im Code der datei "class.rex_slice_publish_date.inc" folgenden Block modifiziert - ab ca. zeile 210 => static function validateDateToTimestamp($ddmmyyyy = "")

Code: Alles auswählen

                    $d_arr = explode('.',$ddmmyyyy);
            if(count($d_arr) != 3) return 0;
            
            $d_arr[0] = intval($d_arr[0]);
            $d_arr[1] = intval($d_arr[1]);
            $d_arr[2] = intval($d_arr[2]);
            if(!($d_arr[0] && $d_arr[1] && $d_arr[2])) return 0;            
            if(!checkdate($d_arr[1],$d_arr[0],$d_arr[2])) return 0;            
            return strtotime("{$d_arr[0]}-{$d_arr[1]}-{$d_arr[2]}");
und mit meinem eigenen Code ersetzt

Code: Alles auswählen

                ### Split Tag / Zeit
        $datum = explode('#',$ddmmyyyy);
        
        ### Tag verarbeiten
        $d_arr = explode('.',$datum[0]);
        
        if(count($d_arr) != 3) return 0;
        $d_arr[0] = intval($d_arr[0]);
        $d_arr[1] = intval($d_arr[1]);
        $d_arr[2] = intval($d_arr[2]);
        if(!($d_arr[0] && $d_arr[1] && $d_arr[2])) return 0;            
        if(!checkdate($d_arr[1],$d_arr[0],$d_arr[2])) return 0;            
        ### Tag in UNIX-Form
        $daytime = strtotime("{$d_arr[0]}-{$d_arr[1]}-{$d_arr[2]}");
        
        ### Zeit verarbeiten
        $t_arr = explode(':',$datum[1]);
        $t_arr[0] = intval($t_arr[0]) * 3600;
        $t_arr[1] = intval($t_arr[1]) * 60;
        ### Zeit auf UNIX-Zeitstempel addieren
        $time = $daytime + $t_arr[0] + $t_arr[1];
        return $time;
In der Eingabe am jeweiligen Slice habe ich das AddOn so modifiziert, dass statt "31.12.2015" (alter Code) nun "31.12.2015#12:00" als Eingabe erwartet wird.

Problem: Ein Javascript-Alert VOR der Datetime-Übergabe zeigt mir korrekt an, dass an das Addon der Wert "31.12.2015#12:00" übermittelt wird. Die verarbeitende Funktion bekommt aber bereits einen UNIX-Zeitstempel geliefert, der meine Zeitangaben ignoriert - in der Datenbank landet also auch nur der UNIX-Zeitstempel für 31.12.2015 00:00 Uhr.

Kann mir da jemand weiterhelfen, wo ich im Code noch was anpassen muss, dass er mir die Zeit mitschleift? Es ist ja nur ein kleines Skript, das kann doch nicht so schwer sein. Ich hab aber keine Ahnung wo ich mit Debuggen anfangen soll, wenn mir beim Absenden des Formulars der richtige Wert geliefert wird, beim Skript aber der falsche Wert ankommt!? :oops:

Wäre schön, wenn da jemand eine Lösung parat hat. Ich kann doch nicht der einzige sein, der Module stündlich zeitschalten will!?

Vielen Dank und
Mit freundlichen Grüßen

Stefan / dpf_dd

Ingo
Beiträge: 782
Registriert: 24. Jun 2010, 00:34

Re: Brauche Hilfe: Zeitschaltung

3. Dez 2015, 16:47

Bist du sicher, dass in der Datenbank der falsche Timestamp landet (und hast du Zeile 74/75 in der rex_slice_publish_date angepasst)?
Dieses ganze Gefrickel mit explode ist übel...

dpf_dd
Beiträge: 151
Registriert: 20. Dez 2007, 14:07

Re: Brauche Hilfe: Zeitschaltung

3. Dez 2015, 18:00

^Hallo Ingo,

danke für deinen Input :)

Also in der DB wird auf jeden Fall immer 0:00 Uhr gespeichert. Wie beschrieben funktioniert die Übergabe von "31.12.2015#12:00" beim Absenden des Formulars. Der Javascript-Teil des Addons empfängt den String erfolgreich in der gewünschten Form (und eben nicht wie vorher "31.12.2015").

Als nächste dachte ich gehe ich also in die verarbeitende Klasse und suche mir die Stelle, die den zeitstempel aufnimmt. Das Javascript übergibt meinen korrekten neuen String direkt an die PHP-Funktion in Zeile 21 der AddOn-config.inc.php

Code: Alles auswählen

rex_slice_publish_date::updateSliceStatus(rex_get('article_id'), rex_get('clang'), rex_get('slice_id'), rex_get('new_status'), rex_get('starttime'), rex_get('endtime')); 
Und hier steige ich dann aus :mrgreen:
Da ich noch keine Möglichkeit versucht habe, mir den rex_get auszugeben, könnte es sein, dass hier schon der Wert falsch ankommt, was aber eigentlich unlogisch ist.
Möglichkeit 2 wäre, dass der Wert hier noch korrekt ankommt, aber dann in der Funktion nicht korrekt verarbeitet wird. Dein Tipp mit Zeile 75/76 ist spitze, den Wald habe ich vor lauter Bäumen noch nicht gesehen! Habe leider mein Redaxo grad nicht zur Hand (bin unterwegs), aber das probiere ich mal aus daheim.

Mit dem explode ist sicher nicht perfekt, aber die Vorlage im Original gibt das gut her. Da wird ja auch das Datum genommen, am Punkt (.) exploded und weiterverarbeitet. Ich finde den Weg, meine Zeit mit Raute (#) anzuhängen und dann am Doppelpunkt (:) zu exploden da nur konsequent im Sinne der Übersicht :mrgreen:

Aber mal dumm gefragt aus rein persönlichem Interesse? Wie würde denn "ein Profi" den Datumstring umwandeln? Und nein, strtotime() lasse ich nicht als Antwort gelten... :lol:

Gruß und danke für den Austausch :)
Stefan / dpf_dd

Ingo
Beiträge: 782
Registriert: 24. Jun 2010, 00:34

Re: Brauche Hilfe: Zeitschaltung

3. Dez 2015, 18:36

dpf_dd hat geschrieben:Da ich noch keine Möglichkeit versucht habe, mir den rex_get auszugeben, könnte es sein, dass hier schon der Wert falsch ankommt, was aber eigentlich unlogisch ist
Ist logisch. Nimm was anderes als # (einfach ein - zb) dann wirds laufen. https://de.wikipedia.org/wiki/Fragmentbezeichner

OT: ich mag Unix Timestamps nicht. Ich würde einen Datepicker/ Timepicker (mit passenden Speicherformaten) verwenden und Datum/ Zeit in einem Datetime Feld speichern.

Nachtrag: https://xkcd.com/1179/

dpf_dd
Beiträge: 151
Registriert: 20. Dez 2007, 14:07

Re: Brauche Hilfe: Zeitschaltung

3. Dez 2015, 20:20

Ingo, ich verneige mich vor Dir! :shock: :shock: :shock: :shock: :shock: :shock: :shock:

Also hab eben geschaut. In Zeile 74/75 hatte ich schon eingetragen, aber halt mit Raute. Hab das jetzt wie vorgeschlagen überall in "-" geändert - und alles funktioniert wie gewünscht auf die Minute genau.

Ingo. Du bist der Wahnsinn! Die Redaxo-Community hier ist echt der Hammer. Keine Trolle, keine abfälligen oder überheblichen Kommentare wenn man es halt nicht wie ein Profi macht. Aber fundierte Tipps und schnelle Hilfe.

Ingo, du hast mich gerade sehr glücklich gemacht. DANKE! :)

TANTE EDITH:

Für alle Mitleser hier nochmal explizit die getätigten Änderungen zum Erreichen der gewünschten Funktion:

Code: Alles auswählen

class.rex_slice_publish_date.inc.php
Zeile 74: date('d.m.Y',$starttime) wird zu ate('d.m.Y-H:i',$starttime) => Statt Raute jetzt mit Minus (DANKE INGO!!!)
Zeile 75: date('d.m.Y',$endtime) wird zu ate('d.m.Y-H:i',$endtime) => Statt Raute jetzt mit Minus (DANKE INGO!!!)
Zeile 84: placeholder='dd.mm.yyyy wird zu placeholder='dd.mm.yyyy-hh:mm => Damit der User auch weiß wie er es eingeben muss
Zeile 85: placeholder='dd.mm.yyyy wird zu placeholder='dd.mm.yyyy-hh:mm => Damit der User auch weiß wie er es eingeben muss
Zeile 222: Diese Zeile auskommentieren, da sie bedingt durch die Modifikation obsolet geworden ist!
Zeile 208 bis 220: Die komplette Funktion "static function validateDateToTimestamp($ddmmyyyy = "")" mit der von mir erweiterten ersetzen:

        static function validateDateToTimestamp($ddmmyyyyhhii = ""){
                    ### Split Tag / Zeit
                    $datum = explode('-',$ddmmyyyyhhii);                
                    ### Wie vorher: Zuerst den Tag verarbeiten...
                    $d_arr = explode('.',$datum[0]);
                    
                    if(count($d_arr) != 3) return 0;
                    $d_arr[0] = intval($d_arr[0]);
                    $d_arr[1] = intval($d_arr[1]);
                    $d_arr[2] = intval($d_arr[2]);
                    if(!($d_arr[0] && $d_arr[1] && $d_arr[2])) return 0;            
                    if(!checkdate($d_arr[1],$d_arr[0],$d_arr[2])) return 0;            
                    ### ... und in UNIX-Form speichern
                    $daytime = strtotime("{$d_arr[0]}-{$d_arr[1]}-{$d_arr[2]}");
                    
                    ### Modifikation: Jetzt die Zeit verarbeiten...
                    $t_arr = explode(':',$datum[1]);
                    $t_arr[0] = intval($t_arr[0]) * 3600;
                    $t_arr[1] = intval($t_arr[1]) * 60;
                    ### ... und auf UNIX-Zeitstempel addieren
                    $time = $daytime + $t_arr[0] + $t_arr[1];
                    return $time;
  
        }

slice_publish_date.css
Zeile 41: 5.5em wird zu 10em => damit der neue Placeholder komplett sichtbar ist

Zurück zu „Allgemeines [R4]“