Ergebnis 1 bis 17 von 17

Thema: Eventliste - Termine 6 Wochen im voraus anzeigen [gelöst]

  1. #1
    Contao-Nutzer Avatar von Hagen
    Registriert seit
    23.06.2009.
    Ort
    Leipzig
    Beiträge
    139

    Frage Eventliste - Termine 6 Wochen im voraus anzeigen [gelöst]

    Liebe Contao-Gemeinde,

    ich möchte über eine Eventliste (Template event_teaser) Termine in den nächsten 6 Wochen anzeigen. Als Auswahlmöglichkeiten unter "Anzeigeformat" finden sich unter "Zukünftige Events" aber nur "1 Monat" oder "3 Monate". Gibt es eine einfache Möglichkeit die nächsten 6 Wochen anzeigen zu lassen? Muss nicht als Auswahl im Backend zur Verfügung stehen, sondern nur im Frontend so angezeigt werden.

    Hatte vielleicht jemand schon das selbe Problem? Für Hinweise und Ansätze bin ich dankbar.

    Schöne Grüße
    Hagen
    Geändert von Hagen (12.02.2018 um 11:08 Uhr)

  2. #2
    Alter Contao-Hase Avatar von kmielke
    Registriert seit
    21.06.2009.
    Beiträge
    1.026
    User beschenken
    Wunschliste

    Standard

    Hallo Hagen,

    für die aktuelle Contao 3.5.x (mit Composer) kannst du calendar_extended 3.7.x einsetzten. Damit kann man das machen. Aber die läuft nicht mit Contao 3.0.

    Gruß Kester
    Gruß Kester

    Kein Support via PN.
    Und wer was spenden will, kann der gerne hier machen. Danke

  3. #3
    Contao-Nutzer Avatar von Hagen
    Registriert seit
    23.06.2009.
    Ort
    Leipzig
    Beiträge
    139

    Standard

    Hallo Kester,

    danke für die Antwort. Ich habe eine ältere Version von calendar_extended installiert, aber damit ist eine 6-Wochen-Anzeige leider noch nicht möglich. Gibt es noch eine andere Möglichkeit, als ein Update des gesamten Systems?

    Schöne Grüße
    Hagen

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    16.679
    User beschenken
    Wunschliste

    Standard

    Aufgrund von Sicherheitslücken solltest du ohnehin auf Contao 3.5.33 aktualisieren.

  5. #5
    Contao-Nutzer Avatar von Hagen
    Registriert seit
    23.06.2009.
    Ort
    Leipzig
    Beiträge
    139

    Standard

    Das ist richtig und für dieses Jahr auch geplant. Bei dem konkreten Projekt ist das Update jedoch mit großem Aufwand verbunden.

    Aber unabhängig von der Contao-Version: Wäre es möglich, z.B. durch Änderungen im Template, einen anderen "Vorschau-Zeitraum" zu nutzen, als die im Anzeigeformat festgelegten?

    Eine Abhilfe könnte sein, wenn die Termine regelmäßig sind, die Anzahl der Events pro Seite zu nutzen. Ich nehme als Zeitraum zwei Monate, wähle die Zahl der Termine so, dass sie ungefähr in 6 Wochen liegen könnten und lasse die Paginierung weg. Aber das wäre nur eine Krücke...

    Gibt es, abgesehen von der Erweiterung vielleicht doch noch eine andere Lösung?

    Danke für das Mitdenken!

  6. #6
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.519
    User beschenken
    Wunschliste

    Standard

    Wenn du auf eine Paginierung verzichten kannst, dann kannst du im Template das Datum auch vor der Ausgabe untersuchen und die Ausgabe dann unterdrücken. Im Modul dazu "alle zukünftigen" auswählen. Bedenke aber, dass das Modul dann immer noch denkt es würde alle zukünftigen Events anzeigen. Falls da außer der Paginierung noch andere Sachen nicht laufen sollten.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  7. #7
    Contao-Nutzer Avatar von Hagen
    Registriert seit
    23.06.2009.
    Ort
    Leipzig
    Beiträge
    139

    Standard

    Hallo Andreas,

    danke für deine Antwort. Beim "Untersuchen des Datums im Template" scheitere ich aber an allen Ecken und Enden. Prinzipiell müsste um das gesamte Template eine if-Abfrage in der Art: wenn das Veranstaltungsdatum minus dem heutigen Datum kleiner/gleich 42 Tage ist, dann zeige Template (sprich den Event) an, oder? Wie würde das in PHP-Code aussehen? Auf dem Gebiet bin ich leider absoluter Laie...

    Danke für das Mitdenken!

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    16.679
    User beschenken
    Wunschliste

    Standard

    Sauberer wäre es das Ganze über einen getAllEvents Hook umzusetzen.

  9. #9
    Contao-Nutzer Avatar von Hagen
    Registriert seit
    23.06.2009.
    Ort
    Leipzig
    Beiträge
    139

    Standard

    Hallo Spooky, mit Hooks habe ich mich bisher leider noch nicht beschäftigt...

    Aber warum sollte ich nicht das Template ändern? Ich habe schon ein Template event_teaser_custom angelegt mit Modifizierungen z.B. im Markup und bei Klassen. Das könnte ich doch auch für die if-Abfrage nutzen?

  10. #10
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.519
    User beschenken
    Wunschliste

    Standard

    Ja, ich dachte auch an den Hook, weil damit wahrscheinlich auch die Pagination funktioniert (bin nicht sicher, müsste ich zuerst testen).

    Habe aber erstmal das mit dem Template empfohlen, weil dies schnell gemacht ist.

    Zuerst musst du herausfinden, welche Variable du untersuchen musst (es muss ein unix timestamp sein evtl. $this->startDate)
    PHP-Code:
    <?php $this->showTemplateVars(); ?>
    Dann musst du den aktuellen unix timestamp bekommen.
    PHP-Code:
    <?php 
      $now 
    time();
    ?>
    Dann brauchst du die Zeit in Sekunden in die Zukunft, welche du erlauben möchtest.
    PHP-Code:
    <?php
      $weekSpan 
    6;
      
    $now time();
      
    $futureSpan 60 60 24 $weekSpan// 60sec * 60min * 24std * 7days * desired-weeks
    ?>
    Jetzt kommt der Check und die Anweisung return, wenn das Event zu weit in der Zukunft liegt. Damit wird dieses Template an dieser Stelle dann sofort verlassen.
    PHP-Code:
    <?php
      $weekSpan 
    6;
      
    $now time();
      
    $futureSpan 60 60 24 $weekSpan// 60sec * 60min * 24std * 7days * desired-weeks

      
    if($this->startDate $now $futureSpan)
      {
        return;
      }
    ?>
    Dieser Code (ungetestet) muss also ganz oben ins Template.

    Wenn du es mit einem Hook machst, dann bekommst du die auszugebenden Events innerhalb des Hooks als ModelCollection. Dieses musst du als Array durchlaufen, den gleichen Check wie oben darauf anwenden und die nicht erwünschten Events aus der Collection herausfiltern und gibst die gefilterte Collection wieder zurück an Contao.
    Geändert von Andreas (12.02.2018 um 14:10 Uhr) Grund: ->date => ->startDate
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  11. #11
    Contao-Nutzer Avatar von Hagen
    Registriert seit
    23.06.2009.
    Ort
    Leipzig
    Beiträge
    139

    Standard

    Hallo Andreas,

    herzlichen Dank für deine Hilfe und die ausführliche Anleitung!

    Ich habe in den Templatevariablen gesehen, dass man für den Timestamp des Termins nicht "date" sondern "tstamp" nehmen muss. Soweit so gut, es ergibt sich aber noch ein Problem: Bei der Operation $now + $futureSpan wird nicht addiert sondern beide Zahlen werden wie Strings aneinander gehängt. Das Ergebnis ist dann immer größer als der Timestamp des Termins und alle zukünftigen Termine werden angzeigt.

    Wie kann ich erreichen, dass $now und $futureSpan wie Zahlen addiert werden?

    Danke für das Mitdenken!
    Geändert von Hagen (12.02.2018 um 09:50 Uhr)

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    16.679
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Hagen Beitrag anzeigen
    Ich habe in den Templatevariablen gesehen, dass man für den Timestamp des Termins nicht "date" sondern "tstamp" nehmen muss.
    Das wäre nicht korrekt. "tstamp" ist der Timestamp für die letzte Änderung des Datenbankeintrags und hat nichts mit dem Datum oder der Uhrzeit des Events zu tun.

  13. #13
    Contao-Nutzer Avatar von Hagen
    Registriert seit
    23.06.2009.
    Ort
    Leipzig
    Beiträge
    139

    Standard

    Danke Spooky für den Hinweis. Ich vermute, dass ich dann für den Timestamp des Termins $start (wie Startdatum) nehmen sollte. Ist das richtig?

    Hast du noch einen Tipp, wie ich die richtige Addition von $now und $futureSpan aus dem Beispiel von Andreas hinbekommen kann?

    Danke für deine Hilfe!

  14. #14
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    16.679
    User beschenken
    Wunschliste

    Standard

    in $this->date und $this->time sollte theoretisch der selbe Timestamp drin stehen.

    Die Berechnung von Andreas stimmt schon so.

  15. #15
    Contao-Nutzer Avatar von Hagen
    Registriert seit
    23.06.2009.
    Ort
    Leipzig
    Beiträge
    139

    Daumen hoch

    Hallo Spooky, Hallo Andreas,

    bei $this->date bekomme ich das formatierte Datum angezeigt und $this->time ist leer. Ich nutze das Template event_teaser - vielleicht ist das da anders?

    Bei $this->start oder $this->startDate bekomme ich einen (den selben) Timestamp angezeigt. Ich habe es getestet, damit werden tatsächlich die Termine der nächsten 6 Wochen aufgelistet. Man muss also im Code von Andreras $this->date durch $this->startDate ersetzen.

    PHP-Code:
     <?php
      $weekSpan 
    6;
      
    $now time();
      
    $futureSpan 60 60 24 $weekSpan// 60sec * 60min * 24std * 7days * desired-weeks

      
    if($this->startDate $now $futureSpan)
      {
        return;
      }
    ?>
    Noch einmal vielen Dank für eure Unterstützung!

  16. #16
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.519
    User beschenken
    Wunschliste

    Standard

    Variablen sind nicht abhängig von einem Template, sondern von dem Modul, welches man benutzt - hier die Eventliste.

    Man kann eine Variable nach integer konventieren, um sicherzustellen, dass sie ein Integer ist. Aber wie du schon richtig erkannt hast ist $this->date kein Integer und damit auch kein Timestamp.

    Ja, $this->startDate oder $this->startTime wäre die richtige Variable.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  17. #17
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.519
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Hagen Beitrag anzeigen
    Bei der Operation $now + $futureSpan wird nicht addiert sondern beide Zahlen werden wie Strings aneinander gehängt.
    Dies kann nicht sein, $now und $futureSpan müssten jeweils ein Integer sein und somit auch die Summe.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

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
  •