Seite 1 von 2

Listview Objekte mit Condition Datum heute

Verfasst: Do 19. Mai 2016, 10:04
von statist
Hallo zusammen,

trotz zahlreicher Beiträge zu diesem Thema klappt bei mir folgendes Szenario nicht: Verschiedene Geburtstage sind als Objekte (Datumsfeld) angelegt, Geburtstage des heutigen Tages (unabhängig vom Jahr) sollen ausgegeben werden. Mein Code lautet aktuell:

Code: Alles auswählen

<?php
$timestamp = time();
$heute = date("d.m", $timestamp);
$condition= "Geburtstag = $heute";
?>
<we:listview name="geburtstage" type="object" condition="\$condition" order="Geburtstag" classid="1" desc="true">
<we:repeat>
Alles Gute zum Geburtstag, <we:field type="text" name="Vorname" />.
</we:repeat>
</we:listview>
Vielleicht könnt Ihr mir helfen, wo hier der Denkfehler liegt?

Re: Listview Objekte mit Condition Datum heute

Verfasst: Do 19. Mai 2016, 10:09
von blickfang
Hi,
ich würde behaupten, dass der timestamp Vergleich nicht funktioniert, je nachdem was beim Objekt als Datum gespeichert ist. Vermutlich unterscheiden sich die Millisekunden der timestamps Deiner abfrage zu dem was beim Objekt der Datenbank steht (hast Du das mal verglichen?). Versuche doch mal einen Zeitraum für den ganzen Tag als Condition zu definieren, dann ist es auch egal, welche Uhrzeit beim Objekt für das Datum gespeichert ist.

Viele Grüße
Timo

Re: Listview Objekte mit Condition Datum heute

Verfasst: Do 19. Mai 2016, 10:12
von statist
Hallo Timo, war auch mein Gedanke (ist ja auch hier im Forum schon diskutiert worden. Allerdings klappt folgender Ansatz auch nicht:

Code: Alles auswählen

<?php
$heute=date("m/d",time());
$condition= "Geburtstag = $heute";
?>

Re: Listview Objekte mit Condition Datum heute

Verfasst: Do 19. Mai 2016, 10:15
von blickfang
ich dachte eher an

Code: Alles auswählen

<?php
$condition = Geburtstag >= $today AND Geburstag <= $tomorrow; ?>
?>
wobei today heute 0:00:00 Uhr und tomorrow als today plus 24 sein sollte.
Gruß
Timo

Re: Listview Objekte mit Condition Datum heute

Verfasst: Do 19. Mai 2016, 12:56
von statist
Das wär dann wohl so:

Code: Alles auswählen

<?php
$heute = time();
$tag = date($heute,"d");
$monat = date($heute,"m");

$today = mktime(0,0,0,$monat,$tag);
$tomorrow = mktime(23,59,59,$monat,$tag);

$condition = Geburtstag >= $today AND Geburtstag <= $tomorrow;
?>
Es werden aber alle Objekte ausgegeben. Wo ist hier der Denkfehler?

Re: Listview Objekte mit Condition Datum heute

Verfasst: Do 19. Mai 2016, 13:10
von blickfang
fühlt sich richtig an. Lass Dir doch die Condition mal ausgeben und steck diese direkt in die Datenbank. Bin mir nicht sicher ob Du den Feldtyp in der Spaltenbezeichnung bei Condition angeben mußt "date_Geburstag"...

Re: Listview Objekte mit Condition Datum heute

Verfasst: Do 19. Mai 2016, 14:27
von statist
Danke für Deine Antwort. Bei <? echo $condition ?> (mit / ohne "date_") wird nichts ausgegeben. Das passt zu meiner Vermutung, dass die Condition gar nicht greift....

Re: Listview Objekte mit Condition Datum heute

Verfasst: Do 19. Mai 2016, 15:03
von mokraemer
also in dem Quelltext fehlen mir einige " sonst kann das mal gar nicht gehen.
die Condition sollte man eher als sql angeben. Die Spalten Datum sollten eigentlich schon auf den Typ Date umgestellt sein, sodaß ein Vergleich mit einem Unixtimestamp nicht geht. Beim aktuellen Datum sollte mit

Code: Alles auswählen

DAY(CURRENT_DATE())=DAY(Geburtstag) AND MONTH(CURRENT_DATE())=MONTH(Geburtstag)
gehen (ungetestet)

Re: Listview Objekte mit Condition Datum heute

Verfasst: Do 19. Mai 2016, 15:40
von statist
Danke mokraemer! Brauch ich dann hier noch UNIX_TIMESTAMP(), wenn ja, wie müsst das aussehen?

Re: Listview Objekte mit Condition Datum heute

Verfasst: Do 19. Mai 2016, 15:47
von statist
Ahh, sorry, hab grad nochmal genau gelesen, dass Du das schon beantwortet hast :wink: Hatte das gerade in der tag:referenz "listview" gelesen, dass man das noch angeben müsste.
Es sollte also so reichen?

Code: Alles auswählen

<we:listview name="geburtstage" type="object" condition="DAY(CURRENT_DATE())=DAY(Geburtstag) AND MONTH(CURRENT_DATE())=MONTH(Geburtstag)" order="Geburtstag" classid="1">

Re: Listview Objekte mit Condition Datum heute

Verfasst: Do 19. Mai 2016, 17:06
von mokraemer
ja so ungefähr - ich hab es nicht getestet und weil hier natürlich jetzt plain-SQL reinkommt weiß ich auch nicht ob die LV das wirklich sauber verarbeitet. Nach Veröffentlichung der 7.0er hatte ich an dem Kode für die Condition noch was geändert das er etwas runder läuft, ob das SQL damit aber ganz verarbeitet wird, müßte ich auch testen.

Re: Listview Objekte mit Condition Datum heute

Verfasst: Do 19. Mai 2016, 17:32
von statist
OK, kann es dann sein, dass es wegen meiner Version 6.4.4 so noch nicht klappt?

Re: Listview Objekte mit Condition Datum heute

Verfasst: Fr 20. Mai 2016, 16:38
von statist
Hallo mokraemer, bin jetzt auf 7.0, funktioniert leider immer noch nicht. Gibt es hier eine Tag-Referenz oä zum Nachlesen, oder hast Du noch einen Tipp, an was's liegt? Vielen Dank!

Re: Listview Objekte mit Condition Datum heute

Verfasst: Fr 20. Mai 2016, 16:51
von blickfang
hast Du Dir das SQL-Query nun mal ausgeben lassen?

Code: Alles auswählen

<?php p_r($GLOBALS['lv']); ?>
dann siehst Du was die Listview condition letztlich für ein Query baut. Wenn das vernünftig aussieht, kann es eigentlich nur noch an der Abfrage-Logik selbst liegen - also das Du was abfragst was nicht zutreffen kann.

Re: Listview Objekte mit Condition Datum heute

Verfasst: Fr 20. Mai 2016, 18:20
von mokraemer
ich hab doch geschrieben, daß dies erst nach der 7.0er geändert wurde - und das ich es auch erst noch ausprobieren müßte.
Da die echte Query am Ende deutlich komplexer ist, wie das was man da hinschreibt, muß die Condition komplett zerlegt werden - das ist auch der Grund warum ich nicht weiß ob der Minimal-Parser hier das überhaupt kann.