Domanda

Ho un modulo di griglia di amministrazione personalizzato. Quando aggiungo un elemento per quella griglia viene chiamato il saveAction () nel controller del mio modulo (ovviamente).

Ho bisogno di attivare un evento personalizzato dopo il record viene salvato (come mostrato qui sotto).

public function saveAction() {
    if ($data = $this->getRequest()->getPost('tendor')) {
    try {
            $tendor = $this->_initTendor();
            $tendor->addData($data);
            $products = $this->getRequest()->getPost('products', -1);
            if ($products != -1) {
                $tendor->setProductsData(Mage::helper('adminhtml/js')->decodeGridSerializedInput($products));
            }
            $tendor->save();
            // custom event to save vendor code
            $evtData = array('tendor_info' => $data, 'tendor_instance' => $tendor);
            Mage::dispatchEvent('my_custom_tendor_save_after', $evtData);

Ora voglio questo evento per essere attivato solo quando viene aggiunto un nuovo record e non quando il record esistente viene modificato.

Come posso trovare la differenza tra la creazione di registrazione e updation di un record?

Può qualcuno aiutarlo a capire questo fuori?

È stato utile?

Soluzione

Hai questa linea nel vostro controller:

$tendor = $this->_initTendor();

posso solo supporre che questo prende il parametro id da _GET e carica l'entità appropriata dal db. È possibile aggiungere questa riga a destra sotto la linea che ho citato:

$shouldDispatchEvent = !(bool)($tendor->getId());

$shouldDispatchEvent è vero solo se l'oggetto $tendor ha un id.
Ora avvolgere la dispatchEvent in questo modo:

if ($shouldDispatchEvent){
    $evtData = array('tendor_info' => $data, 'tendor_instance' => $tendor);
    Mage::dispatchEvent('my_custom_tendor_save_after', $evtData);
}

[EDIT] .
Un altro modo di farlo, nel tuo caso potrebbe essere questo:

if ($tendor->isObjectNew()){
    $evtData = array('tendor_info' => $data, 'tendor_instance' => $tendor);
    Mage::dispatchEvent('my_custom_tendor_save_after', $evtData);
}

Questo funziona se il modello si estende Mage_Core_Model_Abstract (e dovrebbe).
il _isObjectNew membro viene aggiunto all'istanza modello nella _beforeSave (vedi Mage_Core_Model_Abstract::_beforeSave()) metodo, e dal momento che si desidera inviare il vostro evento dopo il salvataggio è fatto si dovrebbe essere in grado di accedervi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top