ChrOnOs Posted December 31, 2009 Share Posted December 31, 2009 Bonjour à tous,Je suis entrain d'intégrer une solution prestashop pour un site de vente de matériel audio et de vinyles. En, ce qui concerne les vinyles, le commerçant à besoin d'extrait sonore pour ses articles. J'ai donc fais l'achat du module MP3 Player de Joel GAUJARD qui fonctionne très bien mais ne permet d'être "hooker" uniquement sur la page du produit (hookProductFooter, hookExtraLeft, hookExtraRight).Mon problème est que le commerçant aimerai que le player soit aussi présent dans la liste des produits des catégories et dans les résultat d'une recherche.Après avoir jeté quelques coup d'oeil aux fichiers PHP, je me suis rendu compte que ce sont les templates category.tpl et search.tpl qui include product_list.tpl. Cela rend donc impossible le rajout d'un hook dans product_list qui serai propre à chaque produit.J'ai donc pensé include dans ces deux fichiers un product_list.php qui s'occuperai du hook et afficherai le template product_list.tpl. Ma question serai alors de savoir comment éviter l'écrasement de mes fichiers category.tpl et search.tpl lors d'un mise à jours.Plus généralement, j'aimerai que l'on m'éclaire sur comment se déroule la contribution à un projet open source. Idéalement, j'aimerai pouvoir vous commit ma modification mais j'imagine qu'il y a de grandes chance pour que cela vienne à l'encontre de vos modifications. En espérant avoir été suffisamment clair...Bonne année à tous :-)++ Link to comment Share on other sites More sharing options...
ChrOnOs Posted December 31, 2009 Author Share Posted December 31, 2009 Bon j'ai trouver une solution à mon problème.J'ai créer un plugin pour smarty /tools/smarty/plugins/function.hook.php : <?php /** * Prestashop Hook plugin * @package Prestashop * @subpackage plugins */ /** * Prestashop {hook} function plugin * * Type: function * Name: hook * Purpose: Generate hook * @author ChrOnOs * @param array * @param Smarty */ function smarty_function_hook($params, &$smarty) { if (!isset($params['name'])) { $smarty->trigger_error("hook: missing 'name' parameter"); return; } if($params['name'] == '') { return; } $args = array(); foreach ($params as $pKey=>$pValue){ if ($pKey != 'name'){ $args[$pKey] = $pValue; } } return Module::hookExec($params['name'], $args); } /* vim: set expandtab: */ ?> Ce plugin permet de placer un hook ou l'on veux en mettant simplement dans le template : {hook name='leNomDuHook'} ou encore {hook name='leNomDuHook' var1='value1'} {hook name='leNomDuHook' var1='value1' var2='value2'} {hook name='leNomDuHook' var1='value1' var2='value2' var3='value3'} 'leNomDuHook' correspond au hook.name de la base de données.Avec cette méthode, il est donc possible de placer des hook sans se soucier du $smarty->assign.Attention cependant, smarty ne fonctionne pas avec des objets mais des tableaux... Dans mon exemple, le fichier product_list.tpl contient : > {if isset($products)} <!-- Products list --> </pre> <ul> {foreach from=$products item=product name=products} ... {hook name='productListExtraRight' product=$product} ... {/foreach} </ul> <br> <!-- /Products list --><br>{/if Dans mon module, j'avais : public function hookProductListExtraRight($params) { global $smarty, $cookie; if (isset($params['product'])){ $product = $params['product']; else if ($id_product = Tools::getValue('id_product')) $product = new Product(intval($id_product)); if (!Validate::isLoadedObject($product)) Tools::displayError('Object product not loaded.'); ... return $this->display(__FILE__, 'mp3player.tpl'); } que j'ai du remplacer par : public function hookProductListExtraRight($params) { global $smarty, $cookie; if (isset($params['product'])){ if (is_array($params['product'])) $product = new Product(intval($params['product']['id_product'])); else $product = $params['product']; else if ($id_product = Tools::getValue('id_product')) $product = new Product(intval($id_product)); if (!Validate::isLoadedObject($product)) Tools::displayError('Object product not loaded.'); ... return $this->display(__FILE__, 'mp3player.tpl'); } N'hésitez pas pour toutes remarques ou suggestions.++ Link to comment Share on other sites More sharing options...
astrolab Posted January 27, 2010 Share Posted January 27, 2010 Et bien tu as bien de la chance de maîtriser cette langue extra-terrestre!J'ai acheté le plugin aussi, mais moi je suis musicien et pas informaticien. Donc même les explications données par Joël, je pige rien et le lecteur ne s'affiche pas :SJe suis son explication en prenant l'exemple qu'il donne pour le template "product-list.tpl ", à savoir: 01. {if isset($products)}02. {php}Module::hookExec('productlist', array('products' => $this->_tpl_vars['products'])){/php}...11. {$mp3player[$product.id_product]}Ou dois-je mettre ces lignes, aux lignes 01,02 et 11?Dois-je changer quelque chose?J'ai besoin d'aide, pour moi c'est du martien. Merci!!!! Link to comment Share on other sites More sharing options...
astrolab Posted January 27, 2010 Share Posted January 27, 2010 Parce qu'en plus, le script que tu as créé m'intéresse: je suis musicien et moi aussi je vends de la musique sur mon site. Et j'aimerais la faire entendre! Link to comment Share on other sites More sharing options...
Joël Gaujard Posted January 27, 2010 Share Posted January 27, 2010 Bonjour à vous 2,Veuillez m'envoyer un mail ou un MP pour faire apparaitre le lecteur sur une liste de produits. Pas besoin du code de ChrOnOs, mon module prevoit ce cas sans bricole.Cordialement,Joel Link to comment Share on other sites More sharing options...
Anartisanart Posted August 14, 2011 Share Posted August 14, 2011 Je cherche aussi (et encore) cette solution pour un presta 1.4, merci. Link to comment Share on other sites More sharing options...
diabolyo Posted September 8, 2011 Share Posted September 8, 2011 up ! 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