Mein obiges Problem ist wieder aufgetreten. Es hat zwar schon mal funktioniert, aber jetzt geht es wieder nicht mehr.
Für mich ist es wichtig, dass ich erkenne ob beim Speichern auch wirklich Daten verändert wurden. Wenn ja wird ein Flag gesetzt.
Folgendes habe ich jetzt gemacht:
1) onsubmit_callback und onload_callback eingebaut
Code:
'onload_callback' => array
(
array('tl_zv_drawing', 'cacheData')
),
'onsubmit_callback' => array
(
array('tl_zv_drawing', 'checkData')
),
2) cacheData speichert mir die alten Werte in der Session
Code:
public function cacheData($dc)
{
$row = $this->Database->prepare("SELECT * FROM tl_zv_drawing WHERE id=?")
->execute($this->Input->get('id'))
->fetchAssoc();
//echo $row['drawingType'];
$this->Session->set('tl_zv_drawing.drawNumber', $row['drawNumber']);
$this->Session->set('tl_zv_drawing.drawingType', $row['drawingType']);
$this->Session->set('tl_zv_drawing.idProject', $row['idProject']);
$this->Session->set('tl_zv_drawing.date', $row['date']);
//....
}
Wenn ich danach gleich print_r($this->Session); ausgebe, sehe ich, dass die alten Werte gesetzt sind.
4) check Data Funktion ueberprueft einfach die alten Werte der Session mit den aktuell gespeicherten
Code:
public function checkData($dc)
{
$objTest = $dc->activeRecord;
if(
$this->Session->get('tl_zv_drawing.drawNumber') !== $objTest->drawNumber ||
$this->Session->get('tl_zv_drawing.drawingType') !== $objTest->drawingType ||
$this->Session->get('tl_zv_drawing.idProject') !== $objTest->idProject ||
$this->Session->get('tl_zv_drawing.date') !== $objTest->date ) {
$this->Database->prepare("UPDATE tl_zv_drawing SET isChanged=1 WHERE id=?")
->execute( $this->Input->get('id'));
}
Wenn ein Backend User bei diesem DCA Eintrag auf speichern klickt, wird zuerst ja die cacheData noch einmal aufgerufen (hier wird noch der alte Wert in die Session gespeichert). Danach wird später checkData aufgerufen. Hier steht aber jetzt komischerweise in der Session nicht der alte Wert drinnen. Es sieht so aus als ob es ein uralter Wert ist. Gibt es hier irgendwo ein Cache für DCA Einträge?
Hier bin ich echt langsam ratlos.
Danke für eure Hilfe.
Lesezeichen