Contao-Camp 2024
Ergebnis 1 bis 23 von 23

Thema: Event-Datum in Alias übrnehmen

  1. #1
    Contao-Fan Avatar von Anke
    Registriert seit
    30.06.2009.
    Ort
    Rhein-Main-Gebiet
    Beiträge
    919

    Standard Event-Datum in Alias übrnehmen

    Hallo,

    vielleicht kann mir jemand helfen...? In der dcaconfig hatte folgender Code dafür gesorgt, dass den Event-Aliasen immer das Eventdatum mitgegeben wurde:

    Code:
    // Always prefix the event alias with the start date (yyyy-mm-dd-), unless it begins with a date already
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['alias']['save_callback'][] = 
       function($varValue, DataContainer $dc)
       {
           if (!empty($varValue) and $dc->activeRecord and !preg_match('/^\d{4}-\d{2}-\d{2}-/', $varValue)) {
               $varValue = date('Y-m-d-', $dc->activeRecord->startDate) . $varValue;
           }
           return $varValue;
       }
     ;
    Das funktioniert zwar grundsätzlich immer noch, generiert aber das Datum 01.01.1970. Würde mir als Nichtprogrammierer jemand sagen, was ich ändern muss, damit das Startdatum des Events wieder übernommen wird?

    Viele Grüße,
    Anke

  2. #2
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Das würde mich auch interessieren. Wir haben ganz oft Events mit gleichem Namen aber zu unterschiedlichen Daten/Uhrzeiten....durch ein automatisches Datum im Alias wären es schönere Links.

    Ich klinke mich hier mal ein.

  3. #3
    Contao-Fan Avatar von Anke
    Registriert seit
    30.06.2009.
    Ort
    Rhein-Main-Gebiet
    Beiträge
    919

    Standard

    Hm, Frank, probier den Code mal aus.

    Ich habe es eben noch einmal getestet und jetzt stimmt das Datum im Alias.
    Jetzt müsste es mir nur noch gelingen herauszufinden, unter welchen Umständen das Datum 1.1.70 generiert wird, denn davon sind ein paar in der Datenbank vorhanden. Einmal hatte ich festgestellt, dass sich der Erfasser eines Events vertippt hatte und das Enddatum vor dem Startdatum lag. Was ich auch nicht verstehe, denn bei einem Reproduktionsversuch, wurde mein Enddatum von Contao korrigiert und gleich dem Startdatum gesetzt.

  4. #4
    Contao-Urgestein Avatar von do_while
    Registriert seit
    15.06.2009.
    Ort
    Berlin | Deutschland
    Beiträge
    3.612
    Partner-ID
    1081
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ich denke mal, wenn Du einen neuen Event anlegst, dann nimmt er den 01.01.1970, da die Callback-Routine zum Generieren des Alias läuft, bevor das Feld mit dem Datum verarbeitet wurde. Wenn Du einen bestehenden Event editierst und das Datum ist bereits gespeichert, dann kommt das richtige heraus.
    Fast: denn wenn Du beim Editieren das Datum änderst, würde wahrscheinlich das alte Datum genommen werden.

  5. #5
    Contao-Fan Avatar von Anke
    Registriert seit
    30.06.2009.
    Ort
    Rhein-Main-Gebiet
    Beiträge
    919

    Standard

    Zitat Zitat von do_while Beitrag anzeigen
    ... da die Callback-Routine zum Generieren des Alias läuft, bevor das Feld mit dem Datum verarbeitet wurde ...
    Das klingt plausibel, sogar für mich. Kannst/würdest du mir mit der Lösung behilflich sein?

    Es ist aktuell, wie du schreibst:
    Neuanlegen eines Events = 1.1.70
    Editieren = gespeichertes Datum bleibt
    Editieren + Alias-Feld leeren = Startdatum wird übernommen
    Geändert von Anke (24.07.2019 um 11:26 Uhr)

  6. #6
    Contao-Urgestein Avatar von do_while
    Registriert seit
    15.06.2009.
    Ort
    Berlin | Deutschland
    Beiträge
    3.612
    Partner-ID
    1081
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Eine direkte Lösung habe ich da auch nicht.
    Ich kenne den Effekt von einem eigenen Modul und lösche nach dem Speichern noch einmal den Alias (ist keine öffentliche Erweiterung).

    Ich wollte immer mal forschen, ob es mit dem Callback des DCA funktioniert, bin aber noch nicht dazu gekommen.

  7. #7
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Zitat Zitat von do_while Beitrag anzeigen

    Ich wollte immer mal forschen, ob es mit dem Callback des DCA funktioniert, bin aber noch nicht dazu gekommen.
    Gibt es hier schon etwas Neues? :-)



    Wie binde ich denn die DCA Config von oben bei Contao 4 ein?

    Vermutlich in app/Resources/contao/dca/tl_calendar_events.php richtig?

    Edit:
    Funzt bei mir super da wir eigentlich nur Events duplizieren und dann bearbeiten. Da nimmt er dann immer sofort das richtige Datum in den Alias. Sehr praktisch!! Danke!


    VG
    Geändert von Kahmoon (07.08.2019 um 11:18 Uhr)

  8. #8
    Contao-Fan Avatar von Anke
    Registriert seit
    30.06.2009.
    Ort
    Rhein-Main-Gebiet
    Beiträge
    919

    Standard

    Zitat Zitat von Kahmoon Beitrag anzeigen
    Gibt es hier schon etwas Neues? :-)
    Nope.


    Zitat Zitat von Kahmoon Beitrag anzeigen
    Wie binde ich denn die DCA Config von oben bei Contao 4 ein?
    Würde mich auch interessieren, da ich gerade das meiste umstelle auf C4. Wird die nicht automatisch eingebunden wie die localconfig, wenn sie unter system/config/ liegt?

  9. #9
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Siehe mein Edit oben. Cache via Contao Manager löschen nicht vergessen.

  10. #10
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Irgendwie macht die Anpassung bei mir Probleme. Das Datum wird jetzt jedes mal beim erneuten Speichern des Events hinzugefügt!?

    hunde-in-der-praxis-m-1905-2019-09-07-2019-09-07


    Folgenden Code habe ich in der tl_calendar_events.php gemacht.

    Code:
    // Always prefix the event alias with the start date (yyyy-mm-dd-), unless it begins with a date already
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['alias']['save_callback'][] = 
       function($varValue, DataContainer $dc)
       {
           if (!empty($varValue) and $dc->activeRecord and !preg_match('/^\d{4}-\d{2}-\d{2}/', $varValue)) {
               $varValue = $varValue . date('-Y-m-d', $dc->activeRecord->startDate);
           }
           return $varValue;
       }
     ;

    Edit:
    Das ursprüngliche Skript fragt ab ob der Event mit dem Datum beginnt und nicht endet. Wie ändere ich das auf die Abfrage am Ende?
    Geändert von Kahmoon (21.08.2019 um 13:23 Uhr)

  11. #11
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    So geht es wenn man das DAtum immer am Ende haben will.

    Code:
    // Always suffix the event alias with the start date (yyyy-mm-dd-), unless it ends with a date already
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['alias']['save_callback'][] = 
       function($varValue, DataContainer $dc)
       {
           if (!empty($varValue) and $dc->activeRecord and !preg_match('/-\d{4}-\d{2}-\d{2}/', $varValue)) {
               $varValue = $varValue . date('-d-m-Y', $dc->activeRecord->startDate);
           }
           return $varValue;
       }
     ;

  12. #12
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Jetzt muss ich dieses Thema noch mal nach oben holen da es im Alltag zwar praktisch ist aber auch "Probleme" macht.

    Wenn ich einen Termin kopiere hat er beim ersten speichern kein Datum....obwohl ich eins angegeben habe. Der Alias wird also "meinterminalias-01-01-1970". Kann ich das irgendwie ändern? Ich habe doch ein Datum eingestellt bevor ich das erste mal speichere!?


    Wir haben bei uns eingestellt das Termindaten mitkopiert werden via:

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['startDate']['eval']['doNotCopy'] = false
    Allerdings bekommt der neue Termin dann das Datum vom Original in den Alias, was auch komplett falsch ist, obwohl ich ja vor dem Speichern bereits ein neues Datum angegeben habe.

    Eine Kopie von einem Termin am 05.11.2019 (alias meintermin-05-11-2019) auf ein neues Datum z.B. 31.11.2019 wird dann meinneuertermin-05-11-2019


    Das hat in der Vergangenheit leider zu Verwirrungen gesorgt wenn ein Termin vom 31.11.2019 in der URL 05-11-2019 hat und diese URL dann vielleicht noch per Mail kommuniziert wird.

  13. #13
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.883
    Partner-ID
    10107

    Standard

    Du musst dir das Datum aus dem POST Request holen.

  14. #14
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Wie mache ich das am besten? Mein Code aus der Datei hatte ich oben schon gepostet.

  15. #15
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.883
    Partner-ID
    10107

    Standard

    PHP-Code:
    \Contao\Input::post(...) 

  16. #16
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Wie würde das in der Datei aussehen? Sorry bin Gelegenheitsprogrammierer und nicht so vertraut mit der Verwendung dieser Art in Contao :-P

    Vermutlich erst mal mit var_dump schauen was in der Postvariable ist bzw. wie die vom startDate genau heisst.

  17. #17
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Sodale....habs gelöst...vermutlich quick & dirty aber es funzt


    Code:
    // Always suffix the event alias with the start date (-yyyy-mm-dd), unless it ends with a date already
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['alias']['save_callback'][] = 
       function($varValue, DataContainer $dc)
       {
               
               
            #Prüfen ob der Eintrag kopiert ist und startDate NULL ist
               if(!empty($varValue) and is_null($dc->activeRecord->startDate)){
                   $varValue = $varValue . date('-d-m-Y', strtotime(\Contao\Input::post('startDate')));   		}else{
               }else{
                #Fügt das Datum zum Alias wenn keins vorhanden ist
                if (!empty($varValue) and $dc->activeRecord and !preg_match('/-\d{2}-\d{2}-\d{4}/', $varValue)) {
                       $varValue = $varValue . date('-d-m-Y', $dc->activeRecord->startDate);          
                   }              
               }          
           
           return $varValue;
       }
     ;
    Geändert von Kahmoon (31.10.2019 um 12:31 Uhr)

  18. #18
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.883
    Partner-ID
    10107

    Standard

    Nimm einfach strtotime

  19. #19
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.273

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Nimm einfach strtotime
    Stimmt, habs im vorherigen Post geändert

  20. #20
    Contao-Nutzer
    Registriert seit
    19.06.2009.
    Beiträge
    177

    Standard Datum im Alias bei kopiertem Event

    Zitat Zitat von Kahmoon Beitrag anzeigen
    Sodale....habs gelöst...vermutlich quick & dirty aber es funzt


    Code:
    // Always suffix the event alias with the start date (-yyyy-mm-dd), unless it ends with a date already
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['alias']['save_callback'][] = 
       function($varValue, DataContainer $dc)
       {
               
               
            #Prüfen ob der Eintrag kopiert ist und startDate NULL ist
               if(!empty($varValue) and is_null($dc->activeRecord->startDate)){
                   $varValue = $varValue . date('-d-m-Y', strtotime(\Contao\Input::post('startDate')));   		}else{
               }else{
                #Fügt das Datum zum Alias wenn keins vorhanden ist
                if (!empty($varValue) and $dc->activeRecord and !preg_match('/-\d{2}-\d{2}-\d{4}/', $varValue)) {
                       $varValue = $varValue . date('-d-m-Y', $dc->activeRecord->startDate);          
                   }              
               }          
           
           return $varValue;
       }
     ;
    Ich möchte ebenfalls automatisch das Event-Datum im Alias haben und habe diese Lösung von Kahmoon ausprobiert (Beim obigen Code ist ein }else{ zu viel, das muss weg).

    Beim Neuanlegen von Events funktioniert das auch soweit gut.

    Wenn man jedoch ein Event kopiert und wieder einfügt, das den gleichen Titel, aber ein anderes Datum hat, dann bleibt der Alias beim Abspeichern auf dem alten Datum, so dass man für beide Events den gleichen Alias hat und daher die "alte" Event-Dateilseite auch beim "neuen" Event verlinkt wird.

    Hat vielleicht bitte jemand einen Tipp für mich, wie ich den Save-Callback ändern muss, damit der Alias von kopierten Events mit dem neuen Datum generiert wird?

  21. #21
    Contao-Fan Avatar von Ainschy
    Registriert seit
    24.06.2009.
    Ort
    Wenden
    Beiträge
    793
    Partner-ID
    5666
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Im Grunde musst du nur das Alias Feld manuell löschen und den Event speichern.

    Der neue Alias wird dann aus dem Titel und dem Startdatum gebildet.

  22. #22
    Contao-Nutzer
    Registriert seit
    19.06.2009.
    Beiträge
    177

    Standard

    Danke Ainschy!
    Es ist mir klar, dass es so funktionieren würde.
    In meinem Anwendungsfall gibt es jedoch Benutzer (Benutzergruppe "Event-Einpfleger"), bei denen das Alias-Feld ausgeblendet ist, da es sie nur verwirren würde bzw. ein Vorgehen wie von Dir vorgeschlagen zu fehlerträchtig wäre. Ich bräuchte eine Lösung, die auch für diese Benutzer ohne Zugriff auf das Alias-Feld funktioniert.

  23. #23
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.935

    Standard

    Beim Kopieren von Events könntest Du den Alias in einem copy callback löschen (https://docs.contao.org/dev/referenc...#config-oncopy).
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •