Infocurci - programmatore Php Roma
Infocurci - programmatore Php Roma
Questo sito non lascia nessun cookie sul vostro pc, consuma pochissimi kb, non profila nulla e non raccoglie dati personali. Siete i benvenuti.

Magento : Come creare un plugin per Magento

La gestione degli eventi e dei relativi plugin viene affrontata da Magento con l'utilizzo intensivo del pattern Observer. Sono presenti oltre 250 eventi , ai quali aggiungere quelli richiamabili con un nome dinamico. Oggi ne vediamo uno di esempio, con il quale sconteremo tutti i prezzi dei prodotti del 10%.

Magento

Oltre 250 eventi : gli sviluppatori di Magento hanno pensato davvero a tutto, quando hanno deciso di implementare il pattern Observer per la creazione di plugin (Joomla, che pure offre un buon supporto in merito, si ferma a 60 eventi).
L'elenco degli eventi disponibili lo trovate sul wiki ufficiale.

Oggi creiamo un plugin di esempio, grazie al quale sconteremo sul sito i prezzi di tutti i prodotti del catalogo del 10%. La modifica avrà effetto solo sul sito e non sul pannello di amministrazione: si tratta ovviamente di un plugin a scopo didattico, però potrebbe tornarci utile se ad esempio un cliente ci dovesse chiedere di scontare "al volo" tutti i prodotti per una vendita last-minute di qualche ora.

Ho chiamato il mio modulo "Eventi" (in italiano, cosi da non generare confusione con la parola "events" che viene usata da Magento) ed il namespace è Infocurci. Per prima cosa creiamo il file Infocurci_Eventi.xml da salvare dentro app/etc/modules:
<?xml version="1.0"?>
<config>
  <modules>
    <Infocurci_Eventi>
      <active>true</active>
      <codePool>local</codePool>
      <version>0.1.0</version>
    </Infocurci_Eventi>
  </modules>
</config>

Fin qui nulla da spiegare, si tratta del solito file di attivazione del modulo di Magento. L'ho impostato direttamente ad active perché il modulo è basato su appena 2 files, quindi lo implementeremo in pochissimo tempo e potremo subito vederlo all'opera. Se state (mi auguro di no!) lavorando in ambiente di produzione, impostate il modulo a false e attivatelo solo quando avete pubblicato gli altri due files qui sotto.

Creiamo adesso il file di configurazione del nostro piccolo modulo. Salviamo il file config.xml dentro la cartella app/code/local/Infocurci/Eventi/etc:
<?xml version="1.0"?>
<config>
    <modules>
        <Infocurci_Eventi>
            <version>0.1.0</version>
        </Infocurci_Eventi>
    </modules>
    <global>
        <models>
            <eventi>
                <class>Infocurci_Eventi_Model</class>
            </eventi>
        </models>
    </global>
    <frontend>
        <events>
            <catalog_product_get_final_price>
                <observers>
                    <eventi>
                        <class>eventi/observer</class>
                        <method>processFrontFinalPrice</method>
                    </eventi>
                </observers>
            </catalog_product_get_final_price>
        </events>
    </frontend>
</config>

Abbiamo dichiarato lo stretto indispensabile per il modulo: la versione, il namespace del model e sopratutto la parte che riguarda la gestione degli eventi.
<events> è la parola chiave di configurazione che indica a Magento la gestione di un evento;
<catalog_product_get_final_price> è il nome attribuito da Magento all'evento (a inizio articolo abbiamo visto il link alla tabella con tutti gli eventi disponibili);
<class>eventi/observer</class> indica a Magento di cercare il file Infocurci_Eventi_Model_Observer
<method>processFrontFinalPrice</method> indica a Magento di richiamare il metodo processFrontFinalPrice della classe appena dichiarata.

Infine, creiamo il file che gestisce il plugin vero e proprio: Observer.php, da salvare dentro app/code/local/Infocurci/Eventi/Model:
<?php
class Infocurci_Eventi_Model_Observer
{
    public function processFrontFinalPrice($observer)
    {
        $product    = $observer->getEvent()->getProduct();
        $product->setFinalPrice($product->getFinalPrice() - ($product->getFinalPrice() *10 /100));
        return $this;
    }
}

Grazie all'oggetto $observer possiamo risalire agevolmente al prodotto in questione e scontarlo del 10% .
Ed ecco qui il nostro plugin in azione! Se volete continuare a far pratica con i plugin di Magento, potete fare questo "compito a casa": questo plugin funziona bene (il prezzo scontato rimane tale anche nel carrello e nel checkout) ma non sconta il prodotto in alcune pagine del sito, come ad esempio quella che impagina i risultati di una query di ricerca. Riuscite a fare in modo che il prezzo appaia scontato anche in quel caso? ciao