Come rilevare una variazione di dati all'interno della scheda nel modulo di amministrazione personalizzato [chiusa]
-
16-10-2019 - |
Domanda
Durante la modifica degli elementi sotto forma di amministrazione personalizzato, come posso controllare se il modulo è stato modificato agli ultimi dati salvati del modulo? C'è un modo per controllare questo usando le funzioni incorporati Magento o dovrei scrivere la convalida per ogni campo del modulo per le modifiche? Ho più schede nella mia forma per nuovo avviso.
Grazie in anticipo.
Soluzione
Quando si dispone di un modello che è un tipo di Mage_Core_Model_Abstract
, allora si può facilmente ottenere i dati precedenti (dati originali) su Save con il metodo public function getOrigData($key=null)
. Ma ci sono altri due metodi che potrebbero essere utili nel vostro caso.
C'è un metodo per sapere se i valori sono cambiati o meno public function hasDataChanges()
. Quindi, utilizzando questo metodo è possibile controllare se i dati è cambiato a livello globale (cioè se non v'è alcun cambiamento sarà questo flag set) e se è cambiato quindi il ciclo di tutti la chiave utilizzando un altro metodo public function dataHasChangedFor($field)
.
Aggiungi questi logica protected function _beforeSave()
.
Ecco come il codice potrebbe essere simile.
protected function _beforeSave() {
parent::_beforeSave();
if ($this->hasDataChanges()) {
foreach ($this->_data as $key => $value) {
if (!$this->dataHasChangedFor($key)) continue;
// Now you know what field value has changed and call your own function to handle the changed parameter, or check conditions.
// This could be a switch/case handler that will call other function just to keep this function clean.
$this->_dataChangeHandler($key, $value);
}
}
}