Modulo solo per BO PDF Stampa E-mail
Tutorial
Scritto da Administrator   
Giovedì 03 Febbraio 2011 22:35

Ciao,

oggi creiamo un modulo che non serva a visualizzare qualche cosa in front office ma che ci permetta di lavorare in back office.

Creiamo quindi una cartella in modules:

u_module_db
il relativo file
u_module_db.php
e la funzione di apertura
<?php
class u_module_db extends Module
{
//nostro codice dentro
}

Il modulo è creato.
Ora definiamo la costruct:
function __construct()  {
$this->name = 'u_module_db';
$this->tab = 'PSM';
$this->version = '0.0';
parent::__construct();
$this->displayName = $this->l('Universal Module');
$this->description = $this->l('...');    }

Questa parte è già ben documentata nel nostro modulo hello world

Ora creiamo il tasto "configure" del modulo con dentro un bottone GO che ci permetta di lanciare la funzione che vogliamo:
function getContent()  {
$this->_html = '<h2>'.$this->displayName.'</h2>';
if (isset($_POST['btnSubmit'])) {    
$this->bdgo();
}    
$this->_html.='<form action="'.$_SERVER['REQUEST_URI'].'" method="post">
<div></div>
<input name="btnSubmit" value="'.$this->l('GO').'" type="submit" />
</fieldset></form>';
return $this->_html;
}

da notare semplicemtne: che se ritorna la pagina dal form dopo aver premuto btnSumbit ($_POST['btnSubmit']) allora eseguiamo la funzione (interna $this->) dbgo()

che ora andiamo a scrivere:
private function bdgo()  {

$prods = Db::getInstance()->ExecuteS('SELECT id_product FROM '._DB_PREFIX_.'product');

foreach ($prods as $prod){
$cats = Db::getInstance()->getRow('SELECT id_category FROM '._DB_PREFIX_.'category_product WHERE id_product='.$prod['id_product'].' ORDER BY id_category DESC');   
$sql='UPDATE '._DB_PREFIX_.'product SET id_category_default='.$cats['id_category'].' WHERE id_product='.$prod['id_product'];
Db::getInstance()->Execute($sql);
}

$this->_html .='done';


return $this->_html;
}

Quindi all'interno della funzione, prendiamo gli ID di tutti i prodotti (SELECT id_product FROM...)

li scorriamo tutti foreac ($prods as $prod)
prendiamo l'ultimo id della categoria del prodotto SELECT id_category FROM category_product........ORDER BY id_category DESC....
e inseriamo nella tabella del prodotto l'id ricavato come id della categoria default

questo esempio di modulo lo utilizzo quando mi ritrovo dopo un import o un'update da un vecchio prestashop ad uno versione 1.3.x o successive che non è presente la categoria di default (non esisteva prima)

Ma ovviamente scorrere tutti i prodotti può servire a mille cose, export, update, liste.....