PrestaShop Forum

The best place in the world to ask questions about PrestaShop and get advice from our passionate community!

PrestaShop Forum

Jump to content

 

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

6 replies to this topic
#1
DevNet

    PrestaShop Fanatic

  • Moderators
  • 1822 posts
Bonjour,

Pour les intéressés, vous trouverez ce nouvel article écrit par Broceliande concernant la mise en place de fonctions personnelles déclarée depuis votre classe module, et utilisable depuis smarty.

http://blog.dev-net....ule-prestashop/

Bonne lecture :)
Image IPBImage IPBImage IPBImage IPBBlog : Ressources développement web
Développement web | Php | Sql | Smarty | Js/Jquery/Ajax | Css | SEO | Administration Serveur Linux | Infogérance

#2
Patric Codron

    PrestaShop Superstar

  • PrestaTeam
  • 9148 posts
Wow, merci à vous deux pour ce tuto !
Patric CodronCommunity Manager | Manager de CommunautéPrestaShop

Posted Image Merci de respecter les règles du forum PrestaShop.com :)
Posted Image Please comply with the PrestaShop.com forum rules :)

#3
a-prods

    PrestaShop Apprentice

  • Members
  • PipPip
  • 458 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 )
Protegez vos SMS et email sur iphone par cryptage et mot de passe: http://www.encode-it.com (pas assez de vente :( )
PS 1.3.7.0 à 1.4.3.0

#4
DevNet

    PrestaShop Fanatic

  • Moderators
  • 1822 posts
Bonjour a-prods,

Qu'est-ce que tu ne comprends pas ?

Si je peux détailler, c'est avec plaisir.
Image IPBImage IPBImage IPBImage IPBBlog : Ressources développement web
Développement web | Php | Sql | Smarty | Js/Jquery/Ajax | Css | SEO | Administration Serveur Linux | Infogérance

#5
a-prods

    PrestaShop Apprentice

  • Members
  • PipPip
  • 458 posts
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.
Protegez vos SMS et email sur iphone par cryptage et mot de passe: http://www.encode-it.com (pas assez de vente :( )
PS 1.3.7.0 à 1.4.3.0

#6
DevNet

    PrestaShop Fanatic

  • Moderators
  • 1822 posts
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
Image IPBImage IPBImage IPBImage IPBBlog : Ressources développement web
Développement web | Php | Sql | Smarty | Js/Jquery/Ajax | Css | SEO | Administration Serveur Linux | Infogérance

#7
Captain FLAM

    PrestaShop Apprentice

  • Members
  • PipPip
  • 425 posts
Bel effort !!

Bravo à vous deux B)
PS 1.4 SVN - 1.5 SVN

Cherche ASSOCIÉS ► pour un site Multi-Produits Européens