Jump to content

[RESOLU] Création d'un module (doc technique) utilisation de Smarty --> ça ne marche pas


Claw

Recommended Posts

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

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

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

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

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

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

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

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

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é ! :lol:

 

Claw

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...