DevNet Posted March 3, 2011 Share Posted March 3, 2011 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.4Bien cordialement 1 Link to comment Share on other sites More sharing options...
shagshag Posted March 3, 2011 Share Posted March 3, 2011 Salut, Bonne idée bravo Link to comment Share on other sites More sharing options...
DevNet Posted March 3, 2011 Author Share Posted March 3, 2011 Je viens de modifier un peu le code car la condition : if(method_exists('smarty', 'registerPlugin')) Semble un peu capricieuse. 1 Link to comment Share on other sites More sharing options...
Broceliande Posted March 3, 2011 Share Posted March 3, 2011 Ce serait à épingler ça !Merci pour le tip DevNet Link to comment Share on other sites More sharing options...
shagshag Posted March 3, 2011 Share Posted March 3, 2011 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 More sharing options...
DevNet Posted March 4, 2011 Author Share Posted March 4, 2011 Merci shagshag, c'est même mieux ! J'ai mis le code à jour. 1 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