abdelwaheb Posted August 28, 2015 Share Posted August 28, 2015 bonsoir. je trouve ce ligne dans ce tutoriels : Pour ma part, j’ai également choisi la solution de placer le code SQL dans un fichier à part. J’ai donc créé un fichier sql_install.php retournant un tableau avec pour chaque entrée : en clé le nom de la table et en valeur le code SQL permettant de créer celle-ci. source:http://connect.adfab.fr/e-commerce-3/module-prestashop-episode-2 je ne comprend comment faire pour créer un table lors de l'installation. j'ecrire ce code: public function installDb(){ $return=true; include (dirname(__FILE__).'/sql_install.php'); foreach($sql as $s){ $return &=Db::getInstance()->execute($s); return $return; } et dans le fichier sql_install.php j'ecrire cette requete sql: $sql="CREATE TABLE IF NOT EXISTS `cup` ( `id` int(11) NOT NULL, `cup_name` varchar(50) NOT NULL, `cup_mail` text NOT NULL, `adress_cup` varchar(50) NOT NULL, PRIMARY KEY (`id`) )"; mysql_query($sql); et enfin le table cup ne sont pas créer. comment resoudre ce probleme? Link to comment Share on other sites More sharing options...
coeos.pro Posted August 29, 2015 Share Posted August 29, 2015 (edited) 1 utilise _DB_PREFIX_ 2 tu utilises foreach sur $sql alors que ce n'est pas un array 3 mysql_query($sql); est inutile Edited August 29, 2015 by coeos.pro (see edit history) Link to comment Share on other sites More sharing options...
abdelwaheb Posted August 29, 2015 Author Share Posted August 29, 2015 (edited) je supprime mysql_query($sql) de fichier sql_install.php et je mis ce code de la module cup <?php class Cup extends ModuleCore { //put your code here public function __construct() { $this->name="cup"; $this->tab="administration"; parent::__construct(); $this->version="0.1"; $this->displayName="CUUUUUup"; $this->description="description de module prestashop"; //$this->confirmUninstall=l('voulez vous supprimer Cuuup?'); } public function install() { parent::install(); $this->registerHook('displayFooter'); } public function installDb(){ $return=true; include (dirname(__FILE__).'/sql_install.php'); $return &=_DB_PREFIX_::getInstance()->execute($s); return $return; } } mais le table cup n'a pas créer dans la base de donnée Edited August 29, 2015 by abdelwaheb (see edit history) Link to comment Share on other sites More sharing options...
coeos.pro Posted August 29, 2015 Share Posted August 29, 2015 Il faut appeler installDb dans la fonction install Link to comment Share on other sites More sharing options...
abdelwaheb Posted August 29, 2015 Author Share Posted August 29, 2015 [PrestaShop] Fatal error in module file :modules/cup/cup.php: Class '_DB_PREFIX_' not found Link to comment Share on other sites More sharing options...
coeos.pro Posted August 29, 2015 Share Posted August 29, 2015 Tu as quoi dans sql_install.php? Link to comment Share on other sites More sharing options...
abdelwaheb Posted August 29, 2015 Author Share Posted August 29, 2015 $sql="CREATE TABLE IF NOT EXISTS `cup` ( `id` int(11) NOT NULL, `cup_name` varchar(50) NOT NULL, `cup_mail` text NOT NULL, `adress_cup` varchar(50) NOT NULL, PRIMARY KEY (`id`) )"; Link to comment Share on other sites More sharing options...
coeos.pro Posted August 29, 2015 Share Posted August 29, 2015 Pour la table il faut mettre _DB_PREFIX.'cup' Mais je ne vois pas d'ou peut venir ton message d'erreur Link to comment Share on other sites More sharing options...
abdelwaheb Posted August 29, 2015 Author Share Posted August 29, 2015 il m'a dit que la Class '_DB_PREFIX_' not found c'est à dire le ce classe ne sont pas connue pour lui Link to comment Share on other sites More sharing options...
coeos.pro Posted August 29, 2015 Share Posted August 29, 2015 J'avais pas vu, tu as mis _DB_PREFIX_::getInstance() il faut mettre Db::getInstance() Link to comment Share on other sites More sharing options...
abdelwaheb Posted August 29, 2015 Author Share Posted August 29, 2015 voilà le code que je mis dans le deux fichier: cup.php <?php class Cup extends ModuleCore { //put your code here public function __construct() { $this->name="cup"; $this->tab="administration"; parent::__construct(); $this->version="0.1"; $this->displayName="CUUUUUup"; $this->description="description de module prestashop"; //$this->confirmUninstall=l('voulez vous supprimer Cuuup?'); } public function install() { parent::install(); $this->registerHook('displayFooter'); $this->installDb(); } public function installDb(){ $return=true; include (dirname(__FILE__).'/sql_install.php'); $return &=Db::getInstance()->execute($sql); return $return; } } sql_install.php $sql="CREATE TABLE IF NOT EXISTS _DB_PREFIX.'cup' ( `id` int(11) NOT NULL, `cup_name` varchar(50) NOT NULL, `cup_mail` text NOT NULL, `adress_cup` varchar(50) NOT NULL, PRIMARY KEY (`id`) )"; et encore le table ne sont pas créer sur la base de donnée Link to comment Share on other sites More sharing options...
abdelwaheb Posted August 29, 2015 Author Share Posted August 29, 2015 si quelqu'un a le livre de Fabien Serny,' Développement de modules pour PrestaShop' il peut trouver un solution. c'est un livre trés important mais malheureusement je le trouve pas sur internet. Link to comment Share on other sites More sharing options...
rvcat Posted August 29, 2015 Share Posted August 29, 2015 (edited) salut, c'est un fichier qui contient des instructions sql. Pourquoi c'est du code php. $sql="......."; perso je mettrai plutot directement la syntaxe. la variable _DB_PREFIX je ne sais pas. pour le champ id, si tu ne le fixe pas ailleurs met le en autoinc. si tu fais des recherches sur les champs cup_name ou cup_mail rajoute des index. ça optimisera les jointures CREATE TABLE IF NOT EXISTS _DB_PREFIX.`cup` (`id` int(11) NOT NULL,`cup_name` varchar(50) NOT NULL,`cup_mail` text NOT NULL,`adress_cup` varchar(50) NOT NULL,PRIMARY KEY (`id`)); Edited August 29, 2015 by rvcat (see edit history) Link to comment Share on other sites More sharing options...
coeos.pro Posted August 30, 2015 Share Posted August 30, 2015 essaye avec ça : <?php class Cup extends Module { public function __construct() { $this->name = 'cup'; $this->tab = 'administration'; parent::__construct(); $this->version = '0.1'; $this->displayName = 'CUUUUUup'; $this->description = $this->l('description de module prestashop'); } public function install() { if (!parent::install() || !$this->registerHook('displayFooter') || !$this->installDb()) return false; return true; } public function installDb() { $sql = 'CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'cup` ( `id` int(11) NOT NULL, `cup_name` varchar(50) NOT NULL, `cup_mail` text NOT NULL, `adress_cup` varchar(50) NOT NULL, PRIMARY KEY (`id`))'; return Db::getInstance()->execute($sql); } } Link to comment Share on other sites More sharing options...
coeos.pro Posted August 30, 2015 Share Posted August 30, 2015 c'est valable aussi pour prestashop 1.6 : https://www.prestashop.com/blog/fr/les-bonnes-pratiques-de-la-classe-db-sur-prestashop-1-5/ Link to comment Share on other sites More sharing options...
Bakhouche Akram Posted August 30, 2015 Share Posted August 30, 2015 Bonjour, Essayez dans : /install/data/db_structure.sql Rajouter : CREATE TABLE IF NOT EXISTS `PREFIX_cup` ( `id` int(11) NOT NULL, `cup_name` varchar(50) NOT NULL, `cup_mail` text NOT NULL, `adress_cup` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8; Ensuite faites l’installation. Cdt Link to comment Share on other sites More sharing options...
abdelwaheb Posted August 30, 2015 Author Share Posted August 30, 2015 (edited) ah ok ça marche mais j'ai trois question : 1) quand j'écrit extends module avec netbeans il ne m'affiche pas et il m'affiche ModuleCore.y'a-t il une différence entre les deux? 2)c'est quoi _DB_prefix et quel est leur rôle dans cette instruction. 3) registerHook('displayFooter') est -il une block vide créer sur le pied de page de front-end Edited August 30, 2015 by abdelwaheb (see edit history) Link to comment Share on other sites More sharing options...
Bakhouche Akram Posted August 30, 2015 Share Posted August 30, 2015 ah ok ça marche mais j'ai trois question : 1) quand j'écrit extends module avec netbeans il ne m'affiche pas et il m'affiche ModuleCore.y'a-t il une différence entre les deux? 2)c'est quoi _DB_prefix et quel est leur rôle dans cette instruction. 3) registerHook('displayFooter') est -il une block vide créer sur le pied de page de front-end Pour 1 je n'ai pas de réponse. 2 - _DB_prefix , c'est simplement un préfixe utiliser sur les noms des tables, pour par exemple avoir plusieurs PrestaShop sur une même bdd. 3 - registerHook('displayFooter') est utiliser pour hooké le module dans le footer, sans avoir a passer par le backoffice. Corrigez moi si je me trompe Cdt Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now