Domanda

Situazione: Ho un codice personalizzato che vorrei hanno valutato quando qualcuno click "Save Categoria" all'interno della sezione "Gestione categorie" del Pannello di amministrazione. Sto pensando che questo può essere realizzato tramite un osservatore, ma non ne sono certo.

Domanda: di un osservatore è il modo corretto di realizzare questo compito? Se è così, come faccio a identificare l'Observer corretta da utilizzare in questa situazione?

Grazie per tutta la comprensione !!

È stato utile?

Soluzione

Grazie per ProxiBlue per una grande spiegazione. E ora di rispondere con precisione alla domanda:

controller_action_postdispatch_adminhtml_catalog_category_save

è l'evento da osservare.

Per sapere che cosa è l'evento di osservare:

Io uso la seguente funzione nel mio osservatore per trovare l'azione da osservare. In

Modello / Observer.php

public function hookToControllerActionPostDispatch($observer) {
    Mage::log($observer->getEvent()->getControllerAction()->getFullActionName());
}

etc / config.xml

<controller_action_postdispatch>
    <observers>
        <controller_action_after>
            <class>Royal_ObserveEvents_Model_Observer</class>
            <method>hookToControllerActionPostDispatch</method>
        </controller_action_after>
    </observers>
</controller_action_postdispatch>

questo registra il regolatore e l'azione chiamata durante l'evento, prefix sia controller_action_postdispatch o controller_action_predispatch all'azione registrato in base alle; quando si sta andando ad innescare il vostro osservatore evento.

Altri suggerimenti

In primo luogo, sì, un osservatore sarebbe il modo migliore, ma può anche essere fatto tramite riscritture. Personalmente cerco sempre di raggiungere il mio personalizzazione tramite osservatori, in quanto consente di compatibilità dei moduli molto più alto.

Come ottenere l'evento corretto: Stare lontano dalla moltitudine di 'elenchi di eventi' a disposizione, in tutto il luogo. Sono generalmente datato, e nella maggior parte dei casi perdere su eventi generati dinamici

I trovare il modo migliore è quello di fare una rapida modifica in /app/mage.php nel metodo dispatchEvent. In pratica basta inviare l'elenco degli eventi generati al SYSTEM.LOG.

Così ho posto un mago :: log ($ name); come prima linea nel metodo, e poi coda var / log / SYSTEM.LOG. Ho poi eseguire l'azione Sto cercando di estendere e visualizzare gli eventi sparato. Alcuni zen-logica (anche solo il buon senso;).) E vedrete gli eventi che si potenzialmente usare

(ricordarsi di rimuovere questo modificare immediatamente dopo aver individuato l'evento che ti interessa)

Ora, per quale evento ... questo in realtà dipende da ciò che è necessario fare.

Sei interessato in alcuni dati di campo che viene postato (in modo un po 'di campo personalizzato aggiunto), poi il palo di controllo / eventi pre sarebbe meglio, in quanto dà accesso al l'oggetto di richiesta, consentendo così di ottenere il postato dati. In alcuni casi teh azione reale si sta estendendo può sparare i propri eventi, che merion essere migliore di pre / post-eventi.

Se non è necessario per raccogliere i dati pubblicati, allora si sarebbe molto probabilmente bisogno del modello categoria Salva (o prima / dopo il salvataggio) eventi.

Questi sono solo due esempi possibili. Dipende da cosa si deve fare nel codice personalizzato.

Cerca di non utilizzare gli eventi generici, in quanto possono realmente rallentare il vostro sistema giù, in quanto saranno eseguito su ogni azione (quindi stare lontano dagli eventi generici ... model_save, e indirizzare l'evento del modello che viene licenziato)

vedi ad esempio il codice in Mage_Core_Model_Abstract

protected function _beforeSave()
    {
        if (!$this->getId()) {
            $this->isObjectNew(true);
        }
        Mage::dispatchEvent('model_save_before', array('object'=>$this));
        Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());   <<<<< TARGET THIS EVENT, NOT THE GENERIC ONE!!
        return $this;
    }

Inoltre, in config.xml, cercare di indirizzare l'area corretta, quando si posiziona vostre direttive osservatori. Non basta metterli tutti nel tag globale. Se l'evento è solo un evento di amministrazione, quindi posizionare l'evento osservatore nella zona tag adminhtml, e lo stesso vale per frontend. vedere il mio breve post sul blog AVOUT qui: http: // www. dhmedia.com.au/article/magento-improve-performance-selective-events

La speranza che aiuta.

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