2010-06-30 10 views
14

Sto provando a scrivere un osservatore che esporterà i dati dell'ordine quando viene effettuato un ordine. Non ho scritto alcun modulo prima. Basando la mia implementazione su questo articolo: http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/customizing_magento_using_event-observer_methodmagento sales_order_place_after osservatore

fino ad ora sto solo cercando di attivare qualche codice fittizio per scrivere su un file. Non visualizzo nulla nel mio registro e il file non viene modificato. L'utente apache ha il permesso per la directory. Ho disabilitato il caching della configurazione nelle impostazioni di Magento. Sono un po 'confuso su alcune delle convenzioni sui nomi; Ho solo cercato di seguire l'esempio. Qualcuno sa dove sto andando male?

in Magento/app/etc/modules/feed.xml:

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Feed_Sales> 
      <codePool>local</codePool> 
      <active>true</active> 
     </Feed_Sales> 
    </modules> 
</config> 

in Magento/app/code/locali/feed/Vendite/etc/config.xml:

<?xml version="1.0"?> 
<config> 
    <global> 
     <models> 
      <feedsales> 
       <class>Feed_Sales_Model</class> 
      </feedsales> 
     </models> 
     <events> 
      <sales_order_place_after> 
       <observers> 
        <feed_sales_order_observer> 
         <type>singleton</type> 
         <class>sales/order_observer</class><!-- I've also tried Feed_Sales_Model_Order_Observer here --> 
         <method>export_new_order</method> 
        </feed_sales_order_observer> 
       </observers> 
      </sales_order_place_after> 
     </events> 
    </global> 
</config> 

Magento/app/code/local/feed/Vendite/Modello/ordine/Observer.php:

<?php 
class Feed_Sales_Model_Order_Observer 
{ 
    public function __contruct() 
    { 

    } 

    /** 
    * Exports new orders to an xml file 
    * @param Varien_Event_Observer $observer 
    * @return Feed_Sales_Model_Order_Observer 
    */ 
    public function export_new_order($observer) 
    { 
     Mage::log("reached export_new_order"); 
     try 
     { 
      $dumpFile = fopen('/home/jorelli/new_orders/testdump', 'w+'); 
      fwrite($dumpFile, 'this is a test!'); 
     } 
     catch (Exception $e) 
     { 
      Mage::log("order export failed.\n"); 
     } 
     return $this; 
    } 
} 
?> 

Magento 1.4 su Debian Lenny con Apache2 se dovesse importa per ogni r Eason.

risposta

0

Santo schifo. Sono stato stupido. L'ho testato con uno script da riga di comando, come faccio con un sacco di cose, ma quel particolare file era scrivibile solo dall'interprete della riga di comando, non dall'interprete di Apache. Avrei dovuto lasciare l'ufficio prima la scorsa notte.

Bene per la cronaca, questo è il modo in cui si attiva un'azione sul posizionamento dell'ordine. Lascerò perdere per i posteri.

3

Il problema sembra essere nella dichiarazione dell'osservatore. Provatelo:

<events> 
     <sales_order_place_after> 
      <observers> 
       <feed_sales_order_observer> 
        <type>singleton</type> 
        <class>feedsales/order_observer</class> 
        <method>export_new_order</method> 
       </feed_sales_order_observer> 
      </observers> 
     </sales_order_place_after> 
    </events> 
+0

grazie per il suggerimento. Non ho notato alcuna modifica: - \ – jorelli

+0

Assicurati di aver cancellato la cache di configurazione prima di cercare la modifica. XML non viene letto su ogni caricamento della pagina. –

+0

sì, ho solo disabilitato completamente la cache di configurazione per il momento. Vale la pena ricordare però^_^ Per la cronaca, hai completamente ragione sul particolare alias di classe. 'feedsales/order_observer' funziona. utilizza anche il nome della classe letterale di "Feed_Sales_Model_Order_Observer'. ma 'vendite/order_observer' non funziona. – jorelli

14

Leggi my articles, ti aiuteranno a capire cosa sta succedendo da un punto di vista della convenzione di denominazione e ti permetteranno di fondarti su alcune delle convenzioni/assunzioni di Magento.

Guardando gli esempi sopra, avete alcune cose non del tutto a posto.

In primo luogo, il file nella cartella etc prende il nome sbagliato

magento/app/etc/modules/Feed.xml 

Questo file deve essere nominato Packagename_Modulename, quindi probabilmente si desidera

magento/app/etc/modules/Feed_Sales.xml 

sguardo al sistema - > Configurazione - > avanzata per vedere se il tuo modulo si presenta. Se lo fa, avrai chiamato questo file correttamente. Senza questo, il modulo che hai creato non viene caricato nel sistema e il tuo codice non ha mai la possibilità di essere eseguito.

Successivamente, si specifica la classe in modo errato. Dite

sales/order_observer 

ma quella prima parte dell'URI (vendite) non è corretta.Hai definito la tua sezione di modelli come

<models> 
     <feedsales> <!-- this is your model part --> 
      <class>Feed_Sales_Model</class> 
     </feedsales> 
    </models> 

che significa che si desidera

feedsales/order_observer 

Acquista il Class/URI tab of Commerce Bug e provare a inserire alcuni URI (come sales/order) per ottenere una migliore idea di quello che sta succedendo qui.

Un altro suggerimento rapido, quando si sta tentando di ottenere la configurazione del gestore, farlo per un evento che si attiva su ogni caricamento della pagina. Quindi, una volta chiamato il metodo, è possibile passare all'evento specifico desiderato e non passare attraverso l'intero processo di acquisto.

Infine, e mi rendo conto che stavi copiando degli esempi, prendi in considerazione la possibilità di inserire il tuo modulo in una cartella chiamata qualcosa di diverso da Sales. Trovo che imitare i nomi delle cartelle principali di Magento aggiunga solo un ulteriore livello di confusione, che non è quello che ti serve mentre stai imparando il sistema.

Problemi correlati