Creare un modulo in Prestashop 1.6

Con questo articolo inauguriamo una nuova di serie di tutorial dedicata a Prestashop, con l’obiettivo di fare un po’ di ordine nel mare di informazioni reperibili sul web riguardo a questo ottimo software per l’e-commerce. Fateci sapere cosa ne pensate, consigli e suggerimenti sono assolutamente bene accetti!

Partiamo da un esempio molto semplice, ovvero come creare un modulo basilare con Prestashop 1.6, che visualizzerà un nuovo box nella colonna di sinistra del tema che stiamo utilizzando.

Per prima cosa, all’interno della cartella modules, creiamo una nuova cartella con il nome del modulo che vogliamo realizzare, senza spazi o caratteri speciali e tutto in minuscolo, chiamiamolo ad esempio mymodule.

All’interno inseriamo un nuovo file php denominato esattamente come la cartella creata in precedenza, quindi mymodule.php.
Ecco il codice da incorporare, dove ci sono i puntini […] in seguito andremo a inserire le parti di codice mancanti.

<?php 
if (!defined('_PS_VERSION_'))
exit;

class Mymodule extends Module {

    public function __construct() {
        $this->name = 'mymodule'; // il nome del modulo (lo stesso del file principale)
        $this->tab = 'content_management'; // sezione in cui va inserito
        $this->version = 0.1;
        $this->author = 'Algoritma';
        $this->need_instance = 0; 
        /*
         * need_instance specifica se un istanza del modulo deve essere caricata
         * quando viene visualizzata la lista dei moduli
           (di norma può essere lasciato a 0)   
         */

        parent::__construct();

        $this->displayName = $this->l('My Module');
        $this->description = $this->l('Questo è un modulo di esempio di Prestashop');
    }
    [...]
}

A questo punto al posto dei puntini […] inseriamo i due metodi che gestiscono cosa fare quando viene installato e quando viene disinstallato il modulo, nel nostro caso l’unica cosa che dobbiamo fare in fase di installazione è registrare l’hook “leftColumn” in modo che il nostro modulo risulti disponibile nella colonna di sinistra del tema.

public function install() {
        if (!parent::install() || !$this->registerHook('leftColumn'))
            return false;
        return true;
    }

 public function uninstall() {
        if (!parent::uninstall())
            return false;
        return true;
    }

Quindi di seguito inseriamo il codice che gestisce cosa richiamare nell’hook “LeftColumn”

public function hookLeftColumn($params) {
    $this->smarty->assign(array(
    'sentence' => $this->l('Hello World')
));

return $this->display(__FILE__, 'mymodule.tpl');
}

Il codice non fa altro che assegnare alla variabile “sentence” la stringa “Hello World” e poi richiama la vista (mymodule.tpl) che si occuperà di visualizzare l’output del modulo.

Non ci resta quindi che creare questo file.
Per seguire gli standard di Prestashop (dalla versione 1.5 in poi) è bene inserirlo nel percorso views/templates/hook, creiamo quindi questa struttura di cartelle in modo che il percorso del file, a partire dalla root del modulo, sia views/templates/hook/mymodule.tpl.

Ecco il codice del file:

<div id="mymodule_left" class="block">
	<h4 class="title_block">{l s='MyModule title' mod='mymodule'}</h4>
	<div class="block_content">
        <p>{$sentence}</p>
	</div>
</div>

Ora installiamo il modulo dal pannello di amministrazione e se tutto è andato a buon fine quando andremo a visualizzare il sito vedremo un nuovo box nella colonna di sinistra con il titolo “Mymodule title” e con la frase “Hello World” come  contenuto. Dal pannello di amministrazione, “Localizzazione -> Traduzioni”, sarà poi possibile tradurre in lingua le due stringhe.

Nell’allegato qui di seguito trovate il modulo appena creato in formato zip: mymodule.

Volete realizzare un progetto e-Commerce basato su Prestashop? Contattateci!

Per qualunque altro dubbio o richiesta utilizzate i commenti qui sotto. Alla prossima!

Condividi questo articolo

15 commenti

  • Ciao, ma se invece di hello world volessi visualizzare un form contatti all’interno del content?
    Come dovrei procedere?

  • Ciao Salvo, per realizzare un form di contatti la soluzione più semplice è sfruttare la funzionalità già inclusa in Prestashop e modificarla per le tue esigenze. Per aggiungere o togliere dei campi devi modificare il controller “ContactController” e la relativa vista, dentro la cartella del tema, “contact-form.tpl”.

  • Ciao, e grazie per la risposta.
    In effetti non devo modificare il modulo contatti ma crearne uno nuovo con 3 soli campi
    Nome
    Cognome
    Email
    E’ un modulo di richiesta lavora con noi.
    Ho provato a creare un modulo seguendo le guide sul web, ma non ci sono riuscito.

    • Dunque, fare un modulo ad hoc per gestire un form di contatti è fattibile ma non semplicissimo da fare e richiede una buona esperienza con Prestashop.
      Conviene invece prendere spunto da come Prestashop ha gestito il form di contatti, è un po’ macchinoso ma una volta che hai capito il concetto è semplice da implementare.
      Magari in uno dei prossimi tutorial approfondirò l’argomento, intanto ti do un paio di dritte per indirizzarti sulla retta via:
      il concetto base è che bisogna creare un nuovo controller, copiandolo da ContactController, chiamandolo per esempio Contact2Controller e cambiando all’interno il parametro $php_self a ‘contact2’.
      Così facendo, aprendo il tuo sito di prestashop con il parametro “?controller=contact2” aprirai una nuova pagina che richiama il controller appena creato.
      A questo punto ti basta modificare quel controller in base alle tue esigenze, “collegandolo” a un file .tpl creato ad hoc (prendendo spunto da contact-form.tpl nella cartella del tema).
      Non è semplice da spiegare in due righe ma spero di aver reso l’idea…

  • Ciao Enrico e grazie ancorra per le tue risposte.
    Ho provato in locale a duplicare semplicemente il controller ContactController.php rinominandolo in Contact2Controller.php, come mi hai gentilmente suggerito. Al suo interno ho modificato public $php_self = ‘contact’; in public $php_self = ‘contact2’; ho salvato e l’ho richiamato da url localho/miosito/?controller=contact2 ed ottengo una pagina bianca. Ho anche provato a cambiare la classe class ContactControllerCore extends FrontController in class Contact2ControllerCore extends FrontController ma ho sempre pagina bianca. Premetto che il file del controller l’ho provato sia su root /modules/miomodulo/controllers/front che su root/controllers/front. In entrambi i casi ho pagina bianca. Dove sbaglio????

  • Ti manca una piccola cosa: devi eliminare il file class_index.php dentro la cartella “cache”, è necessario ogni volta che fai modifiche ai controller o alle classi. Per il resto va bene cambiare il nome della classe del controller che hai creato in modo che si chiami “Contact2ControllerCore”. Se provi ora dovrebbe funzionare 😉

  • Grazie!!! Funziona! Senza il tuo aiuto non ci sarei mai riuscito. Grazie davvero! Ora sto lavorando sul form. Incrociamo le dita. Ti devo una birra! 😉

  • non si trova da nessuna parte, ma si può sapere come e da dove vengono recuperati i valori di $this->l(‘xxxxx’)?

    • l’espressione $this->l(‘stringa da tradurre’) che si trova all’interno del file php del modulo è equivalente a quella usata nei file di template (.tpl) {l s=’stringa da tradurre’ mod=’mymodule’}.
      Per tradurre la stringa devi andare su Localizzazione->Traduzioni e poi scegli tipo di traduzione “moduli installati”.

  • Ciao Enrico,
    non riesco a capire come innestare il modulo carrello sulla barra di navigazione nera (versione 1.6) per intenderci quella barra dove solitamente c’e’ il bannerone, la barra sopra l’header.

    Se hai qualche consiglio te ne sarei grato
    grazie

    • Ciao Gianni,
      devi andare su Moduli>Posizioni, cerchi il modulo Carrello nella posizione “DisplayTop” e clicchi “Scollega”.
      Poi clicchi l’icona in alto “Innestare un modulo”, scegli il modulo “Blocco Carrello” e poi alla voce “Collega su” scegli “displayNav”.

  • Ciao Enrico,
    grazie delle ‘dritte’ che ci dai. Anche io avevo il problema di spostare il modulo carrello nel display nav ed ho fatto come hai scritto. Tutto ok. Però non lo riesco a ‘gestire’ovvero vorrei poterlo spostare su lato sinistro e poi il modulo ‘occupa’ in qualche modo due righe se provo a metterlo ad esempio in mezzo tra la lingue e la scelta valuta ……. il tema e ovviamente quello di default. Sai percaso indicarmi cosa modificare?

    • Ciao Andrea,
      per quanto riguarda il posizionamento del modulo Carrello vai su Moduli->Posizioni e lì, nella posizione DisplayNav, sposti il modulo Carrello come preferisci. Il fatto che vada su due righe invece dipende semplicemente dal fatto che il div che contiene il modulo ha un padding-top impostato, quindi ti basta sovrascrivere il css del modulo, impostando il padding-top di quel div a 0.

  • Ciao, grazie per l’info.
    Ho creato nel mio sito di prestashop una pagina che richiama e stampa dei dati da tabelle sql.
    Nel modulo che ho creato vorrei inserire al suo interno il modulo php che ho creato io lato interfaccia web.

    E’ possibile?
    grazie mille

Leave a comment