Jump to content

Préparez vos modules compatibles pour smarty 3 / PrestaShop 1.4


Recommended Posts

Bonjour,

Dans un avenir proche, la PrestaShop 1.4 sera bientôt là.

Je propose aux développeurs contributeurs de leur enlever une épine du pied pour la préparation de leurs modules afin de les rendre compatibles avec toutes les versions de PrestaShop, dans la mise en place des fonctions et modifications de fonctions vers smarty 2 ou 3.

Le constat :

< PrestaShop 1.4 : moteur smarty 2, avec méthode d'inscription de fonctions smarty personnalisées : register_function('fonction_smarty', 'function_php')

> PrestaShop 1.4 : moteur smarty 3, la méthode register_function('fonction_smarty', 'function_php') est délestée au profit de registerPlugin('type', 'fonction_smarty', 'function_php'), avec type : function ou modifier.

Depuis PrestaShop 1.4.0.15, il existe une méthode de bascule possible entre smarty 2 et smarty 3, mais cela ne rend pas pour autant votre code de module compatible, si vous utiliser encore l'unique fonction register_function() dans vos versions compatibles < 1.4.

Ma proposition :

Pour ça, je me suis inspiré de la méthode smartyRegisterFunction() présente dans la 1.4.0.15, afin de la transposer dans la classe du module directement, et qu'elle se rendre disponible même si l'on utilise PrestaShop < 1.4.

Le problème reste le fait que la configuration PS_FORCE_SMARTY_2, n'existe pas sur PrestaShop < 1.4 et que le smarty 2 ne dispose pas de la méthode registerPlugin(). Pour combler tout ça je vous propose d'intégrer dans la classes principales de tous vos modules la méthode suivante :

   static public function smartyRegisterFunction($smarty, $type, $function, $params) {
       if (!in_array($type, array('function', 'modifier')))
           return false;
       if (version_compare(_PS_VERSION_, '1.4.0.15', '>=')) {
           if (!Configuration::get('PS_FORCE_SMARTY_2'))
               $smarty->registerPlugin($type, $function, $params);
           else 
               $smarty->{'register_'.$type}($function, $params);
       }
       else
           $smarty->{'register_'.$type}($function, $params);
   }



La méthode étant volontairement en static, vous pouvez l'utiliser partout grâce à :

MonModule::smartyRegisterFunction($smarty, 'function', 'fonction_smarty', 'fonction_php');


ou

MonModule::smartyRegisterFunction($smarty, 'modifier', 'fonction_smarty', 'fonction_php');



Vous pourrez ainsi utiliser pleinement l'enregistrement de fonctions personnalisées pour les envoyer à smarty 2 ou 3, que votre module soit pour PrestaShop < 1.4 ou > 1.4

Bien cordialement

  • Like 1
Link to comment
Share on other sites

Un autre truc très utile même s'il est plus simple.

Pour tester la version de Prestashop :

if (version_compare(_PS_VERSION_, '1.4.0.0', '>=')) // version 1.4 ou plus
  $this->tab = 'smart_shopping';
else // sinon
  $this->tab = 'Tools';

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...