thelphite Posted August 16, 2012 Share Posted August 16, 2012 (edited) Slt, je débute et en ce moment j'essai de créer mon premier module. après avoir suivi les tutos de Prestashop, j'ai créé ce code : ------------------------------------------------------------------------------------------------------ /**Script qui affiche un texte en page d'accueil**/ <?php if ( !defined( '_PS_VERSION_' ) ) exit; class BlockPaymentInfo extends Module { public $text; public $titre; function __construct() { $this->name = 'BlockPaymentInfo'; $this->tab = 'front_office_features'; $this->version = 1.0; $this->author = 'Gilbert Franz'; $this->need_instance = 0; parent::__construct(); $this->displayName = $this->l( 'BlockPaymentInfo' ); $this->description = $this->l( 'Few words about how to paye products.' ); $this->text = 'Il était une fois ds la bergerie, 3 louves...'; $this->titre = 'Payment necessaries'; } public function install() { if (parent::install() == false OR !$this->registerHook('footer') OR !$this->registerHook('home')) return false; return true; } public function uninstall() { if (!parent::uninstall()) Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'BlockPaymentInfo`'); parent::uninstall(); } public function hookFooter($params) { global $smarty; $smarty->assign(array( 'text' => $this->text, 'titre' => $this->titre; )); return $this->display(__FILE__, $this->name.'.tpl'); } public function hookHome($params) { global $smarty; $smarty->assign(array( 'text' => $this->text, 'titre' => $this->titre; )); return $this->display(__FILE__, $this->name.'.tpl'); } } ------------------------------------------------------------------------------------------- avec son .tpl : <!-- Block blockpaymentinfo --> <div id="blockpaymentinfo" class="block"> <h4>{l s='titre' mod='blockpaymentinfo'}</h4> <div class="block_content"> <ul> <li><a href="{$base_dir}modules/blockpaymentinfo/blockPaymentInfo.php" title="Click this link">{l s='text' mod='blockpaymentinfo'}</a></li> </ul> </div> </div> <!-- /Block blockpaymentinfo --> ----------------------------------------------------------------------------------------- Mais après avoir copier/coller le dossier de mon module dans l'arborescence de mon site, rien ne se passe. Je suis totalement perdu là. Edited August 16, 2012 by thelphite (see edit history) Link to comment Share on other sites More sharing options...
Ukoo - Guillaume Posted August 16, 2012 Share Posted August 16, 2012 Qu'entendez-vous par "rien ne se passe" ? Une fois uploadé, le module devrait apparaitre dans le Back Office de PrestaShop (onglet Modules), et vous devez l'installer. C'est seulement ensuite qu'il devient visible en Front... Si rien n'apparaît dans l'onglet Module, je vous conseil d'activer l'affichage des erreurs dans le fichier config/config.php. Link to comment Share on other sites More sharing options...
coeos.pro Posted August 16, 2012 Share Posted August 16, 2012 (edited) à mon avis c'est un problème de casse du nom du fichier php, vous avez mis quoi? normalement il faut que ce soit : BlockPaymentInfo.php (pas blockpaymentinfo.php par exemple) idem pour le nom du dossier Edited August 16, 2012 by coeos.pro (see edit history) Link to comment Share on other sites More sharing options...
thelphite Posted August 16, 2012 Author Share Posted August 16, 2012 Re, effectivement, il y'a une différence de casse. Link to comment Share on other sites More sharing options...
thelphite Posted August 16, 2012 Author Share Posted August 16, 2012 (edited) J'ai ce message d'erreur : Parse error: syntax error, unexpected '?' in /home/amscaaf/translate/classes/Module.php(587) : eval()'d code on line 1. suivi de : The following module(s) couldn't be loaded: blockpaymentinfo (parse error in /modules/blockpaymentinfo/blockpaymentinfo.php) blockpaymentinfo (class missing in /modules/blockpaymentinfo/blockpaymentinfo.php) Cependant, voici la ligne mise en cause qui ne contient pas de "?" : if (eval('if (false){'.$file.'}') !== false). ligne 587. Et voici la condition où elle figure pour aller plus vite : if (!class_exists($module, false)) { $filepath = _PS_MODULE_DIR_.$module.'/'.$module.'.php'; $file = trim(file_get_contents(_PS_MODULE_DIR_.$module.'/'.$module.'.php')); if (substr($file, 0, 5) == '<?php') $file = substr($file, 5); if (substr($file, -2) == '?>') $file = substr($file, 0, -2); // if (false) is a trick to not load the class with "eval". // this way require_once will works correctly if (eval('if (false){'.$file.'}') !== false) require_once( _PS_MODULE_DIR_.$module.'/'.$module.'.php' ); else $errors[] = sprintf(Tools::displayError('%1$s (parse error in %2$s)'), $module, substr($filepath, strlen(_PS_ROOT_DIR_))); } Edited August 16, 2012 by thelphite (see edit history) Link to comment Share on other sites More sharing options...
Ukoo - Guillaume Posted August 16, 2012 Share Posted August 16, 2012 Supprimez des bouts de votre code jusqu'à trouver d'où vient l'erreur. Bien souvent c'est une accolade mal fermée ou quelque chose comme ça... Link to comment Share on other sites More sharing options...
coeos.pro Posted August 16, 2012 Share Posted August 16, 2012 (edited) tu peux juste préciser ce que tu as mis comme nom de fichier et de répertoire ? dans le fichier tpl pour les traductions il faut préciser mod avec le nom du module, donc : BlockPaymentInfo : {l s='titre' mod='BlockPaymentInfo'} Edited August 16, 2012 by coeos.pro (see edit history) Link to comment Share on other sites More sharing options...
thelphite Posted August 16, 2012 Author Share Posted August 16, 2012 hum, je viens de changer le nom du dossier, maintenant c'est "blockpaymentinfo". les fichiers .php et .tpl portent le même nom. Link to comment Share on other sites More sharing options...
coeos.pro Posted August 16, 2012 Share Posted August 16, 2012 hum, je viens de changer le nom du dossier, maintenant c'est "blockpaymentinfo". les fichiers .php et .tpl portent le même nom. il faut donc avoir : $this->name = 'blockpaymentinfo'; et {l s='titre' mod='blockpaymentinfo'} Link to comment Share on other sites More sharing options...
thelphite Posted August 16, 2012 Author Share Posted August 16, 2012 Faut que je supprime des bouts de codes dans la classe Module.php ? Link to comment Share on other sites More sharing options...
Ukoo - Guillaume Posted August 16, 2012 Share Posted August 16, 2012 Houla non surtout pas ^^. Dans ton fichier blockpaymentinfo.php, mais juste le temps de repérer d'où vient l'erreur. Tu commentes certaines fonctions, et dès que l'erreur ne s'affiche plus ça veut dire qu'elle se trouve dans ce que tu viens de commenter... en bref faut resserrer l'étau autour de l'erreur... Link to comment Share on other sites More sharing options...
thelphite Posted August 16, 2012 Author Share Posted August 16, 2012 J'ai tout mis en commentaires sauf cette partie : <?php if (!defined('_PS_VERSION_')) exit; class BlockPaymentInfo extends Module { public $text,$titre; function __construct() { $this->name = 'blockpaymentinfo'; $this->tab = 'test'; $this->version = 1.0; $this->author = 'Gilbert Franz'; $this->need_instance = 0; parent::__construct(); $this->displayName = $this->l( 'Block Payment Info' ); $this->description = $this->l( 'Few words about how to paye products.' ); $this->text = 'test du jour'; $this->titre = 'le titre du test'; } Link to comment Share on other sites More sharing options...
coeos.pro Posted August 16, 2012 Share Posted August 16, 2012 supprime public $text,$titre; ça ne sert à rien Link to comment Share on other sites More sharing options...
thelphite Posted August 16, 2012 Author Share Posted August 16, 2012 Je veux bien les enlever mais ces variables sont utilisées dans le constructeur de la classe et c'est principalement ces 2 données qui m'intéressent dans le test. Link to comment Share on other sites More sharing options...
coeos.pro Posted August 16, 2012 Share Posted August 16, 2012 ces variables sont utilisées dans le constructeur de la classe non Link to comment Share on other sites More sharing options...
thelphite Posted August 16, 2012 Author Share Posted August 16, 2012 Idem, le problème me tue là. ^^ Link to comment Share on other sites More sharing options...
coeos.pro Posted August 16, 2012 Share Posted August 16, 2012 tu as bien modifié tous les "mod" dans le fichier tpl ? Link to comment Share on other sites More sharing options...
thelphite Posted August 16, 2012 Author Share Posted August 16, 2012 oui : <!-- Block blockpaymentinfo --> <div id="blockpaymentinfo" class="block"> <h4>{l s='titre' mod='blockpaymentinfo'}</h4> <div class="block_content"> <ul> <li><a href="{$base_dir}modules/blockpaymentinfo/blockpaymentinfo.php" title="Click this link">{l s='text' mod='blockpaymentinfo'}</a></li> </ul> </div> </div> <!-- /Block blockpaymentinfo --> Link to comment Share on other sites More sharing options...
thelphite Posted August 16, 2012 Author Share Posted August 16, 2012 Mon étonnement est que quand je supprime tout le dossier. Plus de problème. J'y comprends rien du tout. Link to comment Share on other sites More sharing options...
franckm1000 Posted August 16, 2012 Share Posted August 16, 2012 (edited) Pourquoi tu n'inscris pas tes variables dans la table configuration de ce style= Configuration::updateValue('TEXT', 'Il était une fois ds la bergerie, 3 louves..'); Configuration::updateValue('TITRE','payment necessaries'); Tu déclares ta fonction install de la façon suivante: if (!parent::install() OR !$this->registerHook('footer') OR !$this->registerHook('home') OR !Configuration::updateValue('TEXT', 'Il était une fois ds la bergerie, 3 louves..') OR !Configuration::updateValue('TITRE','payment necessaries')) return false; return true; Ensuite, pour assigner il suffit d'appeler les variables de la façon siovante: $smarty->assign(array('text'=>Configuration::get('TEXT'),'titre'=>Configuration::get('TITRE'))); Pour utiliser des variables, quelles qu'elles soient, il faut toujours utiliser au moins ce type de variable, parce que construire des variables sur $this->... pas trop pour moi. En outre, dans ta fonction unistall, tu supprimes une table que tu n'as pas crée à l'installation ? Edited August 16, 2012 by franckm1000 (see edit history) Link to comment Share on other sites More sharing options...
thelphite Posted August 17, 2012 Author Share Posted August 17, 2012 Hi, ça ne fonctionne malheureusement pas. Est-ce possible que ce soit une limite au niveau de la mémoire qui bloque l'ajout de nouveau module ?? Link to comment Share on other sites More sharing options...
Ukoo - Guillaume Posted August 17, 2012 Share Posted August 17, 2012 Personnellement je ne pense pas. Je n'ai encore jamais vu ça... Non, il semble plutôt que l'erreur provienne bien d'un erreur de syntaxe dans le code... Link to comment Share on other sites More sharing options...
thelphite Posted August 17, 2012 Author Share Posted August 17, 2012 (edited) Voici le code, simplifié : <!--?php if (!defined('_PS_VERSION_')) exit; class BlockPaymentInfo extends Module { function __construct() { $this--->name = 'blockpaymentinfo'; $this->tab = 'front_office_features'; $this->version = 1.0; $this->author = 'Gilbert'; $this->need_instance = 0; parent::__construct(); $this->displayName = $this->l('Block Payment Info'); $this->description = $this->l('Few words about how to paye products.'); } public function install() { return (parent::install() AND $this->registerHook('footer')) } public function hookFooter($params) { global $smarty; $smarty->assign(array( 'text'=> 'TEXT', 'titre'=> 'TITRE')); return $this->display(__FILE__, 'blockpaymentinfo.tpl'); } public function hookFooter($params) { return $this->hookleftColumn($params); } } Edited August 17, 2012 by thelphite (see edit history) Link to comment Share on other sites More sharing options...
franckm1000 Posted August 17, 2012 Share Posted August 17, 2012 (edited) C'est quoi ça ? <!--?php Et ça: $this--->name = 'blockpaymentinfo'; Et ça, ça mériterait un ; à la fin : return (parent::install() AND $this->registerHook('footer')) Edited August 17, 2012 by franckm1000 (see edit history) Link to comment Share on other sites More sharing options...
Ukoo - Guillaume Posted August 20, 2012 Share Posted August 20, 2012 Essayez de corriger votre code avec les recommandations de franckm1000 pour commencer. L'erreur provient d'une faute de syntaxe c'est sûr à 99% Link to comment Share on other sites More sharing options...
thelphite Posted August 21, 2012 Author Share Posted August 21, 2012 Bjr, j'ai apporté les corrections, idem : <?php if (!defined('_PS_VERSION_')) exit; class BlockPaymentInfo extends Module { function __construct() { $this->name = 'blockpaymentinfo'; $this->tab = 'front_office_features'; $this->version = 1.0; $this->author = 'Gilbert'; $this->need_instance = 0; parent::__construct(); $this->displayName = $this->l('Block Payment Info'); $this->description = $this->l('Few words about how to paye products.'); } public function install() { return (parent::install() AND $this->registerHook('footer')); } public function hookFooter($params) { global $smarty; $smarty->assign(array( 'text'=> 'TEXT', 'titre'=> 'TITRE')); return $this->display(__FILE__, 'blockpaymentinfo.tpl'); } public function hookFooter($params) { return $this->hookleftColumn($params); } } ?> Link to comment Share on other sites More sharing options...
coeos.pro Posted August 21, 2012 Share Posted August 21, 2012 on va faire le point, dans le dossier modules, vous avez un dossier blockpaymentinfo (sans majuscules), dans ce dossier vous avez plusieurs fichiers dont blockpaymentinfo.php (idem, tout en minuscule). Quand vous allez dans le back office de votre boutique dans l'onglet module, votre module apparait ou non ? vous pouvez l'installer ou non ? vous avez un message d'erreur ou autre ? Link to comment Share on other sites More sharing options...
thelphite Posted August 21, 2012 Author Share Posted August 21, 2012 (edited) Bonjour coeos.pro, le nom du dossier, les fichiers .php et .tpl sont en minuscules... mais mon module n'apparait pas ds le back-office car j'ai ce message d'erreur : Parse error: syntax error, unexpected '?' in /home/amscaaf/translate/classes/Module.php(587) : eval()'d code on line 1 The following module(s) couldn't be loaded: blockpaymentinfo (parse error in /modules/blockpaymentinfo/blockpaymentinfo.php) blockpaymentinfo (class missing in /modules/blockpaymentinfo/blockpaymentinfo.php) C'est surtout le "class missing" qui me trouble, mai bon. Edited August 21, 2012 by thelphite (see edit history) Link to comment Share on other sites More sharing options...
thelphite Posted August 21, 2012 Author Share Posted August 21, 2012 J'ai depuis suivi les conseils d'autre développeurs et j'ai ce code maintenant : (le problème est malgré tout tjs là) <?php if (!defined('_PS_VERSION_')) exit; class BlockPaymentInfo extends Module { function __construct() { $this->name = 'blockpaymentinfo'; $this->tab = 'front_office_features'; $this->version = 1.0; $this->author = 'Gilbert franz'; $this->need_instance = 0; parent::__construct(); $this->displayName = $this->l('Block Payment Info'); $this->description = $this->l('Few words about how to paye products.'); } public function install() { return (parent::install() AND $this->registerHook('footer')); } public function hookFooter($params) { global $smarty; $smarty->assign(array( 'text'=> 'TEXT', 'titre'=> 'TITRE')); return $this->display(__FILE__, 'blockpaymentinfo.tpl'); } public function hookFooter($params) { return $this->hookleftColumn($params); } } ?> 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