Claw Posted September 6, 2011 Share Posted September 6, 2011 Bonjour, Je rencontre un problème avec la documentation technique de prestashop ( ici ) au niveau du petit tuto qui permet de créer un module perso et d'utiliser Smarty et en particulier au niveau de la page 36/41 (utilisation de Smarty). En fait tout le début du tuto se passe bien (jusqu'à page35/41) mais dès qu'on essaye de passer des variables via Smarty, plus rien n'apparait en FO autrement dit dès qu'on utilise le code mentionné dans la doc (ci-dessous): Page "mymodule_page.php": <?php global $smarty; include('../../config/config.inc.php'); include('../../header.php'); include('MyModule.php'); $mymodule = new MyModule(); $message = $mymodule->l('Welcome to my shop!'); $smarty->assign('messageSmarty', $message); $mymodule->display(dirname(__FILE__).'/mymodule_page.tpl'); include('../../footer.php'); ?> Page "mymodule_page.tpl": {$messageSmarty} Ma page "mymodule_page.php"est bien appelée mais rien apparait à l'intérieur, j'ai juste mon header et mes colonnes à droite et gauche. J'ai même ajouté du texte en dur ds "mymodule_page.tpl"mais même celui ci n'apparait pas! :/ J'ai modifié "include('MyModule.php');" par "include('mymodule.php');" mais je ne vois plus ce qu'il faut faire. Je suis étonné que personne ait signalé/répondu à ce problème. Merci par avance pour votre aide car je sèche là. Claw Link to comment Share on other sites More sharing options...
Claw Posted September 6, 2011 Author Share Posted September 6, 2011 Je voulais éditer mon sujet car j'avais oublié de préciser ma version prestashop mais a priori impossible d'enregistrer les modifs effectuées (pb nouveau forum peut-être). Donc Prestashop v1.4.4 pour moi, je travaille en ligne et j'ai forcé en BO la compilation de Smarty (pour cette histoire de création de module) Merci par avance. Link to comment Share on other sites More sharing options...
coeos.pro Posted September 6, 2011 Share Posted September 6, 2011 Bonjour, est ce que vous avez essayé : $smarty->assign('messageSmarty', 'test'); juste pour vous assurer de la transmission des données ? Si ça fonctionne alors c'est que le problème viens de la classe MyModule Sinon pour les traductions dans le fichier php d'un module c'est plutôt : $this->l('Welcome to my shop'); Link to comment Share on other sites More sharing options...
Claw Posted September 6, 2011 Author Share Posted September 6, 2011 Bonjour et merci pour ton retour coeos.pro ! J'ai essayé ta piste (ci-dessous) mais même résultat : rien n'apparait <?php global $smarty; include('../../config/config.inc.php'); include('../../header.php'); include('MyModule.php'); $mymodule = new MyModule(); $message = $mymodule->l('Welcome to my shop!'); //$smarty->assign('messageSmarty', $message); $smarty->assign('messageSmarty', 'test'); $mymodule->display(dirname(__FILE__).'/mymodule_page.tpl'); include('../../footer.php'); ?> Ci-dessous ma classe MyModule: <?php class MyModule extends Module { public function __construct() { $this->name = 'mymodule'; $this->tab = 'Test'; $this->version = 1.0; parent::__construct(); $this->displayName = $this->l('My module'); $this->description = $this->l('Description of my module.'); } public function install() { if(parent::install() == false OR !$this->registerHook('leftColumn')) return false; return true; } public function uninstall() { Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'block_cms` WHERE `id_block` ='.intval($this->id)); parent::uninstall(); } public function getContent () { // Instructions de la page de configuration } public function hookLeftColumn($params) { global $smarty; return $this->display(__FILE__, 'mymodule.tpl'); } public function hookRightColumn($params) { return $this->hookLeftColumn($params); } } ?> A savoir que j'ai vraiment fait un copier-coller du tuto de la doc technique...(j'ai vu qu'il y avait une erreur ou 2, p-e des histoires de casse) Où est-ce que pourrait être l'erreur sachant que dans le tuto (doc) avant que j'utilise smarty ça marchait bien? Merci bcp par avance. p.s.: pour les traductions ok merci, en fait j'ai vraiment suivi la doc fidèlement (c'est la 1ère fois que je créé un module ) Link to comment Share on other sites More sharing options...
coeos.pro Posted September 6, 2011 Share Posted September 6, 2011 Je mettrais déjà : class Mymodule extends Module Ta classe mymodule doit être dans le fichier modules/mymodule/mymodule.php (attention à la casse) $this->version = 1.0; Non c'est: $this->version = '1.0'; Dans uninstall tu effaces block_cms mais tu ne la créée pas dans install ..? Essayes déjà ça on verra ensuite Link to comment Share on other sites More sharing options...
Claw Posted September 6, 2011 Author Share Posted September 6, 2011 J'ai fait les 2 modifs: - "class Mymodule extends Module" , j'ai aussi essayé "class mymodule extends Module" sachant que mon fichier s'appele "mymodule.php" ... je ne sais pas si ça a une influence. - et '1.0'... même résultat ! rien n'apparait. Par contre j'ai vu qu'il y avait un fichier d'error_log à la racine de mon module: J'ai mis les dernières lignes [06-Sep-2011 14:47:29] PHP Warning: Missing argument 2 for ModuleCore::display(), called in /home/xxxxxx/public_html/boutique/modules/mymodule/mymodule_page.php on line 10 and defined in /home/xxxxxxt/public_html/boutique/classes/Module.php on line 1015 [06-Sep-2011 14:49:59] PHP Warning: include(MyModule.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in /home/xxxxxx/public_html/boutique/modules/mymodule/mymodule_page.php on line 5 [06-Sep-2011 14:49:59] PHP Warning: include(MyModule.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in /home/xxxxxx/public_html/boutique/modules/mymodule/mymodule_page.php on line 5 [06-Sep-2011 14:49:59] PHP Warning: include() [<a href='function.include'>function.include</a>]: Failed opening 'MyModule.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/xxxxxx/public_html/boutique/modules/mymodule/mymodule_page.php on line 5 [06-Sep-2011 14:49:59] PHP Warning: Missing argument 2 for ModuleCore::display(), called in /home/xxxxxx/public_html/boutique/modules/mymodule/mymodule_page.php on line 10 and defined in /home/xxxxxx/public_html/boutique/classes/Module.php on line 1015 [06-Sep-2011 15:02:56] PHP Fatal error: Cannot redeclare class MyModule in /home/xxxxxx/public_html/boutique/modules/mymodule/mymodule.php on line 41 [06-Sep-2011 15:11:04] PHP Fatal error: Cannot redeclare class MyModule in /home/xxxxxx/public_html/boutique/modules/mymodule/mymodule.php on line 41 [06-Sep-2011 15:11:12] PHP Fatal error: Cannot redeclare class MyModule in /home/xxxxxx/public_html/boutique/modules/mymodule/mymodule.php on line 41 [06-Sep-2011 15:11:50] PHP Fatal error: Cannot redeclare class MyModule in /home/xxxxxx/public_html/boutique/modules/mymodule/mymodule.php on line 41 [06-Sep-2011 15:12:27] PHP Fatal error: Cannot redeclare class MyModule in /home/xxxxxx/public_html/boutique/modules/mymodule/mymodule.php on line 41 [06-Sep-2011 15:13:23] PHP Fatal error: Cannot redeclare class MyModule in /home/xxxxxx/public_html/boutique/modules/mymodule/mymodule.php on line 41 [06-Sep-2011 15:19:12] PHP Fatal error: Cannot redeclare class MyModule in /home/xxxxxx/public_html/boutique/modules/mymodule/mymodule.php on line 41 [06-Sep-2011 15:31:15] PHP Fatal error: Cannot redeclare class mymodule in /home/xxxxxx/public_html/boutique/modules/mymodule/mymodule.php on line 41 Sachant que la ligne 41 correspond à l'avant dernière ligne en l'occurrence à mon accolade fermée "}" juste avant le "?>" Ca te donnerait une idée ? Link to comment Share on other sites More sharing options...
coeos.pro Posted September 6, 2011 Share Posted September 6, 2011 "Cannot redeclare class mymodule"... ce qui signifie que mymodule est déjà déclaré. Link to comment Share on other sites More sharing options...
Claw Posted September 6, 2011 Author Share Posted September 6, 2011 Et comment est-ce possible ? :| Où est-ce que je dois intervenir ? Ca pourrait être ça mon problème ? Link to comment Share on other sites More sharing options...
coeos.pro Posted September 6, 2011 Share Posted September 6, 2011 Ca pourrait être ça mon problème ? Oui il y a des chances, il faut trouver où... dans le répertoire modules il n'y aurait pas mymodule et Mymodule ou MyModule... ? Link to comment Share on other sites More sharing options...
Claw Posted September 6, 2011 Author Share Posted September 6, 2011 non il n'y a qu'un répertoire et il s'appele "mymodule". Rattaché à ce dernier j'ai (casse respectée): - mymodule.php - mymodule.tpl - mymodule_page.php - mymodule_page.tpl Du coup au risque que ça soit un peu long, je te mets le contenu exhaustif de chacun de ces fichiers: - mymodule.php: <?php class mymodule extends Module { public function __construct() { $this->name = 'mymodule'; $this->tab = 'Test'; $this->version = '1.0'; parent::__construct(); $this->displayName = $this->l('My module'); $this->description = $this->l('Description of my module.'); } public function install() { if(parent::install() == false OR !$this->registerHook('leftColumn')) return false; return true; } public function uninstall() { Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'mymodule` WHERE `id_block` ='.intval($this->id)); parent::uninstall(); } public function getContent () { // Instructions de la page de configuration } public function hookLeftColumn($params) { global $smarty; return $this->display(__FILE__, 'mymodule.tpl'); } public function hookRightColumn($params) { return $this->hookLeftColumn($params); } } ?> - mymodule.tpl: <!-- Block mymodule --> <div id="mymodule_block_left" class="block"> <h4>{l s=' Welcome!' mod='mymodule'}</h4> <div class="block_content"> <ul> <li> <a href="{$base_dir}modules/mymodule/mymodule_page.php" title="Click this link"> {l s='Click me!' mod='mymodule'} </a> </li> </ul> </div> </div> <!-- /Block mymodule --> - mymodule_page.php: <?php global $smarty; include('../../config/config.inc.php'); include('../../header.php'); include('mymodule.php'); $mymodule = new mymodule(); $message = $mymodule->l('Welcome to my shop!'); //$smarty->assign('messageSmarty', $message); $smarty->assign('messageSmarty', 'test'); $mymodule->display(dirname(__FILE__).'/mymodule_page.tpl'); include('../../footer.php'); ?> - mymodule_page.tpl: {$messageSmarty} Est-ce que ça pourrait venir du fait que je déclare une variable $mymodule (même nom que classe) dans mymodule_page.php ? Merci beaucoup. Link to comment Share on other sites More sharing options...
coeos.pro Posted September 6, 2011 Share Posted September 6, 2011 Si, ça doit être ça, sinon je ne vois pas d'autres explications. Link to comment Share on other sites More sharing options...
Claw Posted September 6, 2011 Author Share Posted September 6, 2011 tu veux dire par rapport au fait que je déclare une variable $mymodule du même que nom que la classe c'est ça ? Link to comment Share on other sites More sharing options...
coeos.pro Posted September 6, 2011 Share Posted September 6, 2011 non, il y a une ligne en trop : include('mymodule.php'); $mymodule = new mymodule(); Link to comment Share on other sites More sharing options...
Claw Posted September 6, 2011 Author Share Posted September 6, 2011 C'est good je pense que marche !!! Merci bcp coeos.pro ! Ca s'est passé en 2 étapes: - d'abord j'ai supprimé la ligne "include('mymodule.php');" - et ensuite j'ai remplacé dans la ligne 10, $mymodule par $smarty à la ligne "$mymodule->display(dirname(__FILE__).'/mymodule_page.tpl');" car j'avais le message suivant : "PHP Warning: Missing argument 2 for ModuleCore::display(), called in /home/xxxxxx/public_html/boutique/modules/mymodule/mymodule_page.php on line 10 and defined in /home/xxxxxxx/public_html/boutique/classes/Module.php on line 1015" Et tout semble ok désormais! Mais ce qui signifie que la doc technique officielle pour ce sujet là (création d'un module) n'est pas du tout fiable car encore une fois je n'avais fait que des copier-coller des codes présentés dans la doc! Je vais faire remonter ça aux admins. Un grand merci en tout cas à toi ! Claw Link to comment Share on other sites More sharing options...
coeos.pro Posted September 6, 2011 Share Posted September 6, 2011 Ce ne sont que des exemples, il y en a plusieurs si je me souviens bien, mais il faut pas les mélanger. Mais bon, une fois que l'on a compris le principe, tout se passe bien. Link to comment Share on other sites More sharing options...
Claw Posted September 7, 2011 Author Share Posted September 7, 2011 Salu coeos.pro! J'comprends bien mais je considère que cette doc est faite aussi pour quelqu'un qui découvre la création d'un module + smarty (comme moi hier) donc qui n'a par définition pas forcément le recul nécessaire et les réflexes pour faire le tri (selon moi) et au delà de ça il y a bien des erreurs au sein de mêmes exemples (voir ci-dessous un copier coller de la doc) <?php global $smarty; include('../../config/config.inc.php'); include('../../header.php'); include('MyModule.php'); // ==========> ligne en trop $mymodule = new MyModule(); $message = $mymodule->l('Welcome to my shop!'); $smarty->assign('messageSmarty', $message); $mymodule->display(dirname(__FILE__).'/mymodule_page.tpl'); // ===>erreur: remplacer par $smarty-> .... include('../../footer.php'); ?> + des erreurs dans le nommage des fichiers, etc C'est pas bien grave malgré tout, quelque part c'est même très formateur car ça t'oblige à regarder chaque caractère du code donné en exemple ! C'est p-e d'ailleurs l'effet souhaité ! Claw 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