Affected version(s)
contao/core-bundle 4.4.28
contao/calendar-bundle 4.4.28
Description
Bei wiederholenden Events wird nicht das korrekte Datum auf der Detailansicht der entsprechenden Veranstaltung angezeigt. Es wird lediglich das Startdatum angezeigt.
Das Datum des wiederholenden Events steht auch nicht im Template zur Verfügung:

How to reproduce
_Backend > Folgende Einstellungen in Contao:_

_Frontend-Template (event_teaser.html):_

In der Event-Übersicht werden die Daten korrekt angezeigt. Bei Klick auf das wiederholende Event am 20.11.2018 müsste auf der entsprechenden Detailseite das entsprechende Datum angezeigt werden.
_Ausgabe im Frontend-Template (event_full.html):_

Hier müsste der 20.11.2018 stehen und nicht der 13.11.2018.
Lässt sich das in der Onlinedemo reproduzieren? Denn eigentlich hatten wir das schon vor Jahren behoben (siehe contao/core#923).
Hi Leo,
vielen Dank für deine Rückmeldung.
Der Fehler lässt sich mit der Online Contao Demo (mit den gleichen Einstellungen: Siehe oben) reproduzieren:


I think that's normal, isn't it? In the list you see the date of the repeated event. In the reader you see the date of the original event.
In der Detailansicht eines Events möchte ich aber nicht das Datum des Ursprungs-Events haben, sondern das Datum des tatsächlichen Events, wie in der Eventliste zu sehen.
Für den Benutzer ist es doch irreführend, wenn auf der Detailseite ein falsches Datum angezeigt wird.
In der Detailansicht eines Events möchte ich aber nicht das Datum des Ursprungs-Events haben, sondern das Datum des tatsächlichen Events, wie in der Eventliste zu sehen.
In der Eventliste wird der Event mehrfach mit verschiedenen Daten angezeigt, die Detailseite ist aber jeweils dieselbe und kann somit nicht genau das Datum auf das geklickt wurde anzeigen.
Ich denke es wäre am besten das erste Datum das in der Zukunft liegt anzuzeigen, also am 15.11.2018 sollte 2018-12-23 angezeigt werden. Was dem Screenshot nach bereits der Fall ist.
Die Eventliste könnte aber (genau wie der Eventkalender) das Datum als GET Parameter dem Eventreader mit übergeben.
Vielen Dank für eure Rückmeldung.
Leo hat auf das Ticket contao/core#923 verwiesen, wo genau das Problem beschrieben wird. Das Problem besteht nun aber wieder in Contao 4.4.28 und ich verstehe nicht, warum das hier wieder so zu unterschiedlichen Meinungen führt.
@ausi
Ich habe ein Event, dass beispielsweise am 01.05.2018 erstellt wurde, welches sich alle 7 Tage wiederholen soll. Nun klickt der Nutzer in der Eventliste am 07.05.2018 auf das zu wiederholende Event und bekommt das Datum 01.05.2018 angezeigt (Der Infotext "This event is repeated every 7. day" soll im Template nicht angezeigt werden). Der Nutzer weiß nicht, dass es sich hier um ein wiederholendes Event handelt.
Warum wird hier also ein anderes Datum angezeigt? Das versteht doch der Nutzer nicht und ist irritierend. Vielleicht stehe ich hier aber auch auf den Schlauch ...
@fritzmg
Daran hatte ich auch schon gedacht, funktioniert aber nicht, wenn der Nutzer beispielsweise über Google direkt auf die entsprechende Eventdetailseite kommt und nicht den Umweg über die Eventliste geht. Hier kann dann kein GET- oder POST-Parameter übergeben werden, wenn ich das richtig sehe und es wird dann dementsprechend wieder das falsche Datum auf der Eventdetailseite angezeigt. Außerdem wird in Google das falsche Datum indexiert!
@leofeyer
Könntest du dich vielleicht auch nochmal zu dem Problem äußern, welches vor Jahren hätte behoben sein sollen?
Daran hatte ich auch schon gedacht, funktioniert aber nicht, wenn der Nutzer beispielsweise über Google direkt auf die entsprechende Eventdetailseite kommt und nicht den Umweg über die Eventliste geht. Hier kann dann kein GET- oder POST-Parameter übergeben werden, wenn ich das richtig sehe und es wird dann dementsprechend wieder das falsche Datum auf der Eventdetailseite angezeigt.
Das stimmt so nicht. Wenn Google die URL inkl. GET Parameter indexiert, dann passt es ja.
Außerdem wird in Google das falsche Datum indexiert!
Das stimmt auch nicht. Die Eventlisten enthalten ja entsprechende Microdata Markup.
Das stimmt so nicht. Wenn Google die URL inkl. GET Parameter indexiert, dann passt es ja.
Und wenn der Link ohne GET-Parmater kommuniziert wird? Ehrlich gesagt, fände ich es besser wenn hier nicht mit dem GET-Parameter gearbeitet wird, damit man das Datum nicht nachträglich manipulieren kann.
Das stimmt auch nicht. Die Eventlisten enthalten ja entsprechende Microdata Markup.
Das "korrekte" Microdata Markup ist aber nicht auf der Eventdetailseite hinterlegt, oder?
Und wenn der Link ohne GET-Parmater kommuniziert wird? Ehrlich gesagt, fände ich es besser wenn hier nicht mit dem GET-Parameter gearbeitet wird, damit man das Datum nicht nachträglich manipulieren kann.
Was schlägst du dann vor?
Das "korrekte" Microdata Markup ist aber nicht auf der Eventdetailseite hinterlegt, oder?
Nein, aber Google sind die Event Daten des Events durch die Eventliste bekannt.
In contao/core#923 haben wir festgestellt, dass es nicht möglich ist, auf der Reader-Seite zu wissen, welches Datum der Benutzer angeklickt hat, ohne das Datum als GET-Parameter zu übergeben.
Wir hatten dann gesagt, dass man zumindest keine vergangenen Termine anzeigen sollte; also in Deinem Beispiel würde ab dem 14.11. nicht mehr der 13.11. sondern der 20.11. angezeigt (so wie @ausi es oben beschrieben hat "das erste Datum das in der Zukunft liegt"). Allerdings fanden das die Leute noch verwirrender, weil sie jetzt auf den Termin am 13.11. geklickt haben und stattdessen aber der 20.11. angezeigt wurde. Daher haben wir die Änderungen zurückgenommen.
Die einzige nicht verwirrende Lösung wäre die Übergabe des Datums als GET-Parameter, was jedoch aus Sicherheitsgründen nicht geht, da man sonst sowohl den Suchindex als auch den HTTP-Cache flooden könnte. Insofern bleibt nur die bisherige Lösung…
Die einzige nicht verwirrende Lösung wäre die Übergabe des Datums als GET-Parameter, was jedoch aus Sicherheitsgründen nicht geht, da man sonst sowohl den Suchindex als auch den HTTP-Cache flooden könnte. Insofern bleibt nur die bisherige Lösung…
Naja, ein zum Event nicht passendes Datum könnte ja einen 40x Status Code erzeugen.
Alles irgendwie unbefriedigend.
Irgendwann hatten wir uns auch mal darauf geeinigt, dass fehlerhafte GET-Parameter keine 40x'er erzeugen sollten.
Wie wäre es, wenn man das originale Datum zeigt und zusätzlich den nächsten in der Zukunft liegenden Termin ausweist (ggf. auch mehr als nur einen)?
Irgendwann hatten wir uns auch mal darauf geeinigt, dass fehlerhafte GET-Parameter keine 40x'er erzeugen sollten.
Wo hatten wir das? Ich glaube das war auch nur ein spezieller Fall - und nicht ein allgemeiner. Außerdem geht es ja nicht um beliebige GET Parameter, sondern genau einen und auch nur dann, wenn der Wert des GET PArameters ungültig ist. Und auch nur auf der reader Seite.
Der spezielle Fall war hier - die Lage hat sich aber scheinbar wieder geändert..
Wenns keine Probleme mit dem Suchindex gäbe wär ich auch für eine überprüfte GET-Parameter-Variante glaube ich.
Also zusammengefasst bedeutet das nun:
Das aktuelle Datum kann bei wiederholenden Events nicht in der Detailansicht des entsprechenden Events angezeigt werden?
Wenn dem so ist, dann müsste ich für Redakteure die Funktion von wiederholenden Events deaktivieren. D. h. Redakteure müssten händisch jeden wiederholenden Event als Duplikat in Contao anlegen und jeweils das Datum anpassen?
Bei evtl. Änderungen an dem Event müsste dann jedes einzelne Event wieder bearbeitet werden.
Im Bezug auf SEO (Stichwort "Duplicate Content") wäre das auch nicht optimal, da "X-Seiten" mit gleichen Inhalten existieren würden.
Da wird sich unser Kunde aber freuen ...
D. h. Redakteure müssten händisch jeden wiederholenden Event als Duplikat in Contao anlegen und jeweils das Datum anpassen? Da wird sich unser Kunde aber freuen ...
Nur weil es ein Feature nicht in den Core von Contao schafft bedeutet das nicht, dass es nicht dennoch für die Website eines Kunden umgesetzt werden kann.
Die Eventliste könnte aber (genau wie der Eventkalender) das Datum als GET Parameter dem Eventreader mit übergeben.
Ich denke die Übergabe des Datums als GET-Parameter ist nicht optimal. Gerade für die angesprochenen Suchmaschinen sollte es eine Seite nicht mehrfach mit dem selben Inhalt geben.
Wie wäre es, wenn man das originale Datum zeigt und zusätzlich den nächsten in der Zukunft liegenden Termin ausweist (ggf. auch mehr als nur einen)?
Ich denke in diese Richtung sollte es gehen. Mein Lösungsvorschlag wäre $this->date so belassen wie es jetzt ist (das erste Datum das in der Zukunft liegt) und zusätzlich ein Array pastDates sowie upcomingDates dem Template übergeben.
Damit würde man Google glücklich machen, weil im Quelltext alle Metadaten für alle Vorkommen des Events enthalten sind und für die Besucher der Website wäre auch mehr Klarheit geschaffen.
Zudem könnte man über eine Anpassung des Templates fast alle gewünschten Szenarien abdecken wie z. B. nur das nächste Datum anzeigen, nur die Vergangenen, nur die Zukünftigen, nur die nächsten Drei uvm..
Theoretisch ließe sich sogar die Variante mit dem GET-Parameter dann über eine Template-Anpassung realisieren ☺️
@minstyle du hast immer noch keinen Vorschlag gebracht, wie du es überhaupt gerne hättest.
@minstyle du hast immer noch keinen Vorschlag gebracht, wie du es überhaupt gerne hättest.
Es wäre schön, wenn auf der Eventdetailseite eines Events das Datum steht, wann das Event das nächste Mal stattfindet, abhängig von dem eingestellten Intervall ($this->repeatEach).
Das müsste sich doch mit dem aktuellen Datum, dem Startdatum, dem Enddatum und dem Intervall irgendwie ausrechnen lassen, oder? (siehe Beitrag von @ausi)
Ich denke in diese Richtung sollte es gehen. Mein Lösungsvorschlag wäre
$this->dateso belassen wie es jetzt ist (das erste Datum das in der Zukunft liegt) und zusätzlich ein ArraypastDatessowieupcomingDatesdem Template übergeben.Das halte ich für ein gutes Feature über das man nachdenken könnte. Wäre hilfreich wenn diese Arrays
pastDatesundupcomingDatesvom Bundle aus zur Verfügung stünden.
Zudem könnte man über eine Anpassung des Templates fast alle gewünschten Szenarien abdecken wie z. B. nur das nächste Datum anzeigen, nur die Vergangenen, nur die Zukünftigen, nur die nächsten Drei uvm..Und wenn man das alles im Modul (Eventleser) einstellen könnte , wäre das komfortabel.
Es wäre schön, wenn auf der Eventdetailseite eines Events das Datum steht, wann das Event das nächste Mal stattfindet, abhängig von dem eingestellten Intervall (
$this->repeatEach).
Das ist ja bereits der Fall. In deinem Screenshot der Contao-Demo ist 2018-12-23 das Datum, wann das Event das nächste Mal stattfindet.
Es wäre schön, wenn auf der Eventdetailseite eines Events das Datum steht, wann das Event das nächste Mal stattfindet, abhängig von dem eingestellten Intervall (
$this->repeatEach).Das müsste sich doch mit dem aktuellen Datum, dem Startdatum, dem Enddatum und dem Intervall irgendwie ausrechnen lassen, oder? (siehe Beitrag von @ausi)
Das ist ja bereits der Fall und auch in deinem Screenshot zu sehen. Daher die Nachfrage, was genau du nun eigentlich haben möchtest.
Allerdings schreibt hier @leofeyer folgendes:
Die einzige nicht verwirrende Lösung wäre die Übergabe des Datums als GET-Parameter, was jedoch aus Sicherheitsgründen nicht geht, da man sonst sowohl den Suchindex als auch den HTTP-Cache flooden könnte. Insofern bleibt nur die bisherige Lösung…
- Bei Klick auf die Eventliste soll das aktuelle Datum übergeben und auf der Eventdetailseite (via GET-Parameter oder einer anderen Methode) ausgelesen werden.
Was soll das bringen? Das aktuelle Datum muss doch nicht als GET Parameter übergeben werden, das weiß der Server bereits ;). Was willst du mit dem GET Parameter machen? Oder meinst du das Datum des angeklickten, wiederholten Events? Also so wie hier beschrieben dann: https://github.com/contao/contao/issues/175#issuecomment-439034082
Hier habe ich mich vielleicht falsch ausgedrückt, sorry:
Mit dem aktuellen Datum meine ich nicht das Datum des heutigen Tages, sondern das Datum wann das Event tatsächlich stattfindet (siehe mein Beitrag).
Ok verstehe, also so wie von mir schon beschrieben.
@leofeyer bzgl.
Die einzige nicht verwirrende Lösung wäre die Übergabe des Datums als GET-Parameter, was jedoch aus Sicherheitsgründen nicht geht, da man sonst sowohl den Suchindex als auch den HTTP-Cache flooden könnte. Insofern bleibt nur die bisherige Lösung…
Das Kalender Modul macht das allerdings auch bereits: ModuleCalendar.php#L285 - um eben der Eventliste ggf. mitzuteilen, dass die Termine des ausgewählten Tages angezeigt werden sollen: ModuleEventlist.php#L92-L150
Wäre das nicht die selbe Problematik dort?
@ausi prinzipiell halte ich den doppelten Content für vernachlässigbar. Allerdings finde ich auch, dass es die bessere Lösung ist im Eventleser einfach die nächsten Termine auszugeben. Das ist sowohl für Google als auch für den Benutzer informativer, imho. Sollte das auch in das core Template wandern für Contao 4.7?
Wäre das nicht die selbe Problematik dort?
Ja, vermutlich schon. Im Grunde ist der Angriff immer möglich – man kann ja jeder URL irgendwelche Parameter anhängen. Somit wäre die Übergabe des Datums als GET-Parameter doch eine mögliche Lösung.
Falls nicht die Lösung mit GET Parameter benutzt wird und statt dessen im Eventleser die nächsten Termine angezeigt werden: dann braucht man allerdings auch im Eventleser Modul eine Einstellung, mit der man festlegen kann, wieviele Zukünftige Termine für wiederholende Events berechnet werden sollen (und damit angezeigt werden können bzw. sollen).
Allerdings finde ich auch, dass es die bessere Lösung ist im Eventleser einfach die nächsten Termine auszugeben. … Sollte das auch in das core Template wandern für Contao 4.7?
Ich denke schon. Wenn wir die Einstellungen für die zukünftigen und vergangenen Event-Daten standardmäßig auf 0 setzen wäre es auch rückwärtskompatibel.
Könnten die evtl. Änderungen auch in Contao 4.4-Update berücksichtigt werden?
Könnten die evtl. Änderungen auch in Contao 4.4-Update berücksichtigt werden?
Nein, es wäre ja ein neues Feature.
Wie am 22. November auf Mumble besprochen, könnte man die Formulierung anpassen:
Dieses Event wiederholt sich alle … und findet das nächste Mal am … statt.
Zudem könnte man die vorherigen und nächsten Termine im Template verfügbar machen, so wie @ausi es in https://github.com/contao/contao/issues/175#issuecomment-439190520 vorgeschlagen hat.
Teil 1 (verbesserte Formulierung) implementiert in 78a06362761a1a570fa9b741402bd0a95d59ad6b.
ein Array
pastDatessowieupcomingDatesdem Template übergeben
@ausi Soll das Array nur die Unix-Timestamps enthalten oder einen formatierten String? Und wie viele Einträge sollen es maximal sein bei einem Event, dass sich unendlich oft wiederholt?
Soll das Array nur die Unix-Timestamps enthalten oder einen formatierten String?
Ich denke dieselben Werte die jetzt im Template für das Hauptdatum zur Verfügungstehen (date, datetime, day, month).
Und wie viele Einträge sollen es maximal sein bei einem Event, dass sich unendlich oft wiederholt?
@Toflar hat (wenn ich mich richtig erinnere) auf Mumble vorgeschlagen eine Funktion ans Template zu übergeben der man die gewünschte Anzahl übergeben kann. Dadurch muss die Berechnung auch nur durchgeführt werden wenn wirklich etwas ausgegeben wird im Template.
Ich stell mir das in etwa so vor fürs Template:
<?php foreach ($this->upcomingDates(3) as $date): ?>
<time datetime="<?= $date['datetime'] ?>"><?= $date['date'] ?></time>
<?php endforeach ?>
Teil 2 ($this->getPastDates() und $this->getUpcomingDates()) implementiert in c7dcbe33297a9db3049485438068a3112d46a9f9.
Any reason why you don‘t include it in event_full for example? Imho we should show what‘s possible there :)
Most helpful comment
Wie am 22. November auf Mumble besprochen, könnte man die Formulierung anpassen:
Zudem könnte man die vorherigen und nächsten Termine im Template verfügbar machen, so wie @ausi es in https://github.com/contao/contao/issues/175#issuecomment-439190520 vorgeschlagen hat.