Jump to content

[Tuto] Ajoutez vos propres fonctions à Smarty depuis un module prestashop


DevNet
 Share

Recommended Posts

moi qui croyais que je m’améliorais en programmation (je suis graphiste a la base). J'ai rien pigé :(

Bien ça a l'air tellement simple que je ne demanderais pas d’explication, snif...

 

Faut vraiment que je retourne aux bases.

En tout cas merci, je suis sur que ça aidera ceux qui comprennent. (je ne désespère pas )

Share this post


Link to post
Share on other sites

je vais repotasser plus tard.

 

mais en gros ce que j'ai saisi c'est que dans le coeur de PS on a une fonction "maFonctionSMarty" qui renvoi 10 variables mais ne renvois que 5 variables utilisable dans les tpl et meme pas tout les tpl.

en faisant smartyRegisterFunction($smarty, 'function', 'maFonctionSMarty', $callback);

on recupere de nouveaux les 10 que l'on restitue.

 

maintenant la suite :

public function maFonctionSMarty($params)
{
return $this->l('mon texte traduit');
}

me dis que c'est pas ça du tout, et la je me noie. Car ça veut peut être dire qu'on défini ici un texte quelconque qu'on réutilisera x fois dans les tpl. Et donc, si je veux une valeur dans la base il faut quand faire une requete sql avec apres un assign ->smarty.

 

Bref je tourne un peu en rond.

Share this post


Link to post
Share on other sites

Dans ce tutoriel, Broceliande montre comment mettre en place une fonction (l'exemple de sa finalité n'est pas le principal ici) qui sera utilisable depuis les fichiers template smarty.

 

Pour exemple, une fonction que tout le monde utilise dans son template est dateFormat :

 

On la trouve par exemple dans ./prestashop/order-detail.tpl, ligne 54 :

 

<td>{dateFormat date=$state.date_add full=1}</td>

 

dateFormat n'existe pas en natif dans le framework de Smarty. Elle est donc créée et mise à disposition par le noyau PrestaShop depuis le fichier ./smarty.config.inc.php, ligne 74 :

 

smartyRegisterFunction($smarty, 'function', 'dateFormat', array('Tools', 'dateFormat'));

 

Pour aller plus loin, la fonction php smartyRegisterFunction() mise à disposition par le noyau, permet d'émuler smarty V2 et aussi V3 (suivant votre configuration), pour combler le problème de la fonction register_function() dépréciée par le framework smarty V3 et remplacée par registerPlugin().

 

La fonction dateFormat étant "initialisée", il faut quelle effectue un traitement. Comme dans sa déclaration depuis le smartyRegisterFunction(), on remarque très clairement le dernier paramètre qui permet de donner l'emplacement de la méthode à traiter. Si celle-ci se situe dans une classe, et c'est le cas pour la fonction dateFormat, alors le paramètre doit être :

 

array('[Classe]', '[Methode de la classe]')

 

Ainsi, à chaque appel de la fonction dateFormat dans vos templates, la méthode qui se lancera sera celle dans ./classes/Tools.php, ligne 460 :

 

public static function dateFormat($params, &$smarty)

 

Pour ce qui est de la contribution de Broceliande, son tutoriel nous permet de profiter de cette possibilité, sans toucher au noyau, soit par une déclaration dans un module.

 

Bien cordialement

Share this post


Link to post
Share on other sites

  • 4 years later...

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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More