Hi,
das ist jetzt auch Teil des letzten Posts, aber so kann man es vielleicht auch besser finden, wenn man mal gezielt danach sucht.
Folgende Herausforderung:
Das Model hat bereits ein Startdatum und Enddatum, welches über Backend angegeben werden kann.
Jetzt möchte ich, dass man herausfinden kann ob der Datensatz noch aktuell ist oder nicht. Also, ob das Enddatum bereits in der Zukunft liegt, oder nicht.
Dazu folgender Ansatz:
/**
* abgelaufen
*
* @var boolean $abgelaufen
*/
protected $abgelaufen = FALSE;
/**
* Returns the abgelaufen
*
* @return boolean $abgelaufen
*/
public function getAbgelaufen() {
return ($this->getEndtag() < new \DateTime());
}
/**
* Sets the abgelaufen
*
* @param boolean $abgelaufen
* @return void
*/
public function setAbgelaufen($abgelaufen) {
$this->abgelaufen = $abgelaufen;
}
/**
* Returns the boolean state of abgelaufen
*
* @return boolean
*/
public function isAbgelaufen() {
return $this->abgelaufen;
}
In meinem Kopf hätte das ja schon funktionieren sollen. Tut es aber nicht. Zumindest nicht ganz.
Sehr spannend ist nämlich, dass Fluid zwar über eine abfrage <f:if condition="{datensatz.abgelaufen}"> wohl unterscheiden kann ob das Enddatum nun vorbei ist oder nicht, allerdings lt DEBUG Abgelaufen immer FALSE liefert.
Jetzt stellt sich die Frage... was ist hier verkehrt.
Mein Verständnis würde sagen - irgendwas stimmt da beim Setter nicht, $this->abgelaufen wurde doch nicht deklariert?! Hab aber nicht geschafft das zu korrigieren.
Da kommt noch eine weitere Herausforderung hinzu...
Was ich nicht so bedacht habe ist, dass bei $this->getEndtag() < new \DateTime() ein Datum mit einer aktuellen Tageszeit verglichen wird. Das bedeutet aber, dass bei einem Endtag 13.05.2015 natürlich Mitternacht gemeint ist, aber Abgelaufen doch erst nach dem 13.05. also am 14.05. TRUE sein soll. Das bedeutet Endtag + 86400 (sekunden eines tages). Hab da einiges herumprobiert aber bin nicht dahinter gekommen, vielleicht hat da auch jemand einen Tipp.
Hier mein Ansatz:
/**
* Returns the abgelaufen
*
* @return boolean $abgelaufen
*/
public function getAbgelaufen() {
$folgetag = $this->getEndtag() + 86400;
return ($folgetag < new \DateTime());
}
Lg M.