Aggiunta dei metodi install/unistall
I metodi install()
e unistall()
permettono di gestire le funzioni da eseguire quando l'amministratore del negozio installa o disinstalla un modulo. A questo punto aggiungiamo, all'interno del blocco principale del file sample.php
, i metodi di installazione e disinstallazione del modulo e delle tabelle SQL. Durante l'installazione di un modulo, è possibile eseguire diverse azioni: copia di file, creazione tabelle SQL e modifica o creazione variabili di configurazione.
Nel nostro caso, quello che dobbiamo fare in fase di installazione è:
- verificare che il modulo sia effettivamente installato;
- verificare che il modulo sia collegato all'hook
leftColumn
in modo che il nostro modulo risulti disponibile nella colonna di sinistra del tema; - richiamare la funzione
installDB
per la creazione e l'inizializzazione delle tabellesample
esample_lang
Viceversa, il metodo di disinstallazione, elimina semplicemente l'impostazione di configurazione del modulo Sample.
public function install() {
if (!parent::install() OR !$this->installDB()) // verifica che il modulo e le tabelle db sono effettivamente installato.
return false;
if (!$this->registerHook('displayLeftColumn')) // verifica che il modulo è legato all'hook leftColumn.
$this->registerHook('displayLeftColumn');
if (!$this->registerHook('displayHeader')) // verifica che il modulo è legato all'hook header.
$this->registerHook('displayHeader');
return true;
}
public function uninstall() {
if (!parent::uninstall() || !$this->uninstallDB() || !$this->unregisterHook('leftColumn') || !$this->unregisterHook('header'))
return false;
return true;
}
private function installDB() {
$query = '
CREATE TABLE IF NOT EXISTS '._DB_PREFIX_.'sample (
`id_sample` int(10) NOT NULL AUTO_INCREMENT,
PRIMARY KEY(`id_sample`)
) ENGINE=MyISAM default CHARSET=utf8
';
if (!Db::getInstance()->Execute($query))
return false;
$query = '
CREATE TABLE IF NOT EXISTS '._DB_PREFIX_.'sample_lang (
`id_sample` int(10) NOT NULL AUTO_INCREMENT,
`id_lang` int(10) NOT NULL,
`contenuto` text NOT NULL,
PRIMARY KEY(`id_sample`,`id_lang`)
) ENGINE=MyISAM default CHARSET=utf8';
if (!Db::getInstance()->Execute($query))
return false;
$sql1 = 'INSERT INTO `'._DB_PREFIX_.'sample` (`id_sample`) VALUES (\'1\')';
Db::getInstance()->Execute($sql1);
foreach (Language::getLanguages(false) as $lang) {
$sql2 = 'INSERT INTO `'._DB_PREFIX_.'sample_lang` (`id_sample`, `id_lang`, `contenuto`)
VALUES(1, '.(int)$lang['id_lang'].', \'Hello world!\')';
Db::getInstance()->Execute($sql2);
}
return true;
}
private function uninstallDB()
{
$query1 = 'DROP TABLE '._DB_PREFIX_.'sample';
$query2 = 'DROP TABLE '._DB_PREFIX_.'sample_lang';
if (Db::getInstance()->Execute($query2))
return Db::getInstance()->Execute($query1);
}
Quindi, tramite il metodo install()
e diverse istruzioni IF per controllare eventuali anomalie durante il proceso di installazione, abbiamo registrato il modulo, creato e inizializzato le tabella sample
e sample_lang
tramite la chiamata a funzione installDB()
. Affinchè un modulo possa essere agganciato ad un hook, questo deve essere registrato in Prestashop.
La registrazione modulo->hook viene fatta attraverso il metodo registerHook($nome_hook)
. E' possibile trovare l'elenco dei nomi degli hook nella sezione "Posizioni", presente all'interno della voce menù "moduli", nel pannello di amministrazione.
$this->registerHook('displayLeftColumn')
- posizionamento modulo nella colonna sinistra;$this->registerHook('displayHeader')
- posizionamento nell'header del sito.
public function install() {
if (!parent::install() OR !$this->installDB()) // verifica che il modulo e le tabelle db sono effettivamente installato.
return false;
if (!$this->registerHook('displayLeftColumn')) // verifica che il modulo è legato all'hook leftColumn.
$this->registerHook('displayLeftColumn');
if (!$this->registerHook('displayHeader')) // verifica che il modulo è legato all'hook header.
$this->registerHook('displayHeader');
return true;
}
Analogamente, abbiamo creato un modulo unistall() per avere un processo di disinstallazione personalizzato con:
- rimozione tabelle database con la chiamata alla funzione personalizzata uninstallDB();
- collegamento hook sinistro e header con il metodo unregisterHook($nome_hook).
public function uninstall() {
if (!parent::uninstall() || !$this->uninstallDB() || !$this->unregisterHook('leftColumn') || !$this->unregisterHook('header'))
return false;
return true;
}
Creazione hook e installazione del modulo sample
Nel metodo install()
abbiamo collegato, tramite il metodo $this->registerHook
, il modulo nella colonna sinistra del nostro sito. Utilizziamo il metodo hookDisplayLeftColumn()
, per visualizzare e passare dei valori al nostro hook, esso preleverà, tramite la classe sampleClass
, il valore presente nel campo "contenuto" della tabella sample_lang
e passerà il testo nel file template left.tpl
presente nella cartella views/templates/hook/left.tpl
.
Il hookDisplayHeader()
viene utilizzato per inserire del codice nell'intestazione delle pagine. Questo è in genere utilizzato per aggiungere CSS o il codice Javascript. Nel nostro caso aggiungerà un collegamento al file CSS del modulo, /css/style.css
.
public function hookDisplayLeftColumn(){
$content = sampleClass::getContent();
$contenuto = new sampleClass((int)$content->id, $this->context->language->id);
$this->smarty->assign(
array(
'content' => $contenuto,
)
);
return $this->display(__FILE__, 'left.tpl');
}
public function hookDisplayHeader(){
$this->context->controller->addCSS($this->_path.'css/style.css', 'all');
}