ach34 Posted August 23, 2016 Share Posted August 23, 2016 Je veux récupérer la référence ($REF) de la déclinaison pour appliquer dans product.tpl {$product->getColor($REF)|escape:'html':'UTF-8'} Je sais que c'est possible dans product.js de modifier la référence directement dans la page if (selectedCombination['reference'] || productReference) { if (selectedCombination['reference']) $('#product_reference span').text(selectedCombination['reference']); else if (productReference) $('#product_reference span').text(productReference); $('#product_reference:hidden').show('slow'); } else $('#product_reference:visible').hide('slow'); Mais comment récupérer la référence dans product.tpl ou product.php dans une variable ? Merci pour votre aide Link to comment Share on other sites More sharing options...
ach34 Posted August 23, 2016 Author Share Posted August 23, 2016 {$combination|@var_dump} Dans product.tpl {$combination|@var_dump} erreur : Notice: Undefined index: combination in /share/MD0_DATA/Web/www/X009_analiadeco/dev/tools/smarty/sysplugins/smarty_internal_templatebase.php(157) : eval()'d code on line 389 Notice: Trying to get property of non-object in /share/MD0_DATA/Web/www/X009_analiadeco/dev/tools/smarty/sysplugins/smarty_internal_templatebase.php(157) : eval()'d code on line 389 Link to comment Share on other sites More sharing options...
ach34 Posted August 23, 2016 Author Share Posted August 23, 2016 Oups désolé : combinations avec un s Ok merci mais comment avoir la référence de la déclinaison appelée pour que je puisse l'utiliser dans la fonction : {$product->getColor($REF)|escape:'html':'UTF-8'} Link to comment Share on other sites More sharing options...
ach34 Posted August 23, 2016 Author Share Posted August 23, 2016 (edited) Il faut qu'on sache à quoi correspond : $product->getColor(); Dans tous les cas au changement de déclinaison il faudra faire ça en XHR dans le product.js Je vais chercher la référence produit pour afficher un descriptif particulier des couleurs du produit public function getColor($ref) { return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' SELECT `desc` FROM `'._DB_PREFIX_.'COULEUR` WHERE `ref` = \''.pSQL($ref).'\''); } Est-ce qu'il faut créer une variable de session qu'on modifie en Ajax ? Edited August 23, 2016 by ach34 (see edit history) Link to comment Share on other sites More sharing options...
ach34 Posted August 24, 2016 Author Share Posted August 24, 2016 (edited) Tu as deux solutions : Tu charges toutes les description couleur correspondant à ton produit et tu les assignes via smarty ou sinon Au changement de déclinaison sur fait une requête ajax pour récupérer la description couleur de la déclinaison choisit. Si je choisi la deuxième solution. j'ai trouvé comment récupérer le ID de la couleur attributesCombinations[i]['id_attribute'] Comment je fais pour passer la référence dans product.php ou product.tpl pour récupérer la référence et la faire passer dans ma fonction ? avez-vous une idée ? Edited August 24, 2016 by ach34 (see edit history) Link to comment Share on other sites More sharing options...
ach34 Posted August 24, 2016 Author Share Posted August 24, 2016 (edited) La référence vous l'avez comme dit dans votre premier message avec : selectedCombination['reference'] Oui j'avais compris mais quand je fais window.location.replace(url + 'ref='+selectedCombination['reference'] + request); l'URL devient http://nas2/ADECO/index.php?id_product=8&controller=product&search_quer=VP%20424%2002&results=1ref=VP%20424%2004#/11-couleur-noir Je n'ai plus ref et le search_quer est la référence par défaut. Mon problème c'est de récupérer la référence cliqué dans product.tpl si ça passe pas dans l'url. Je cherche... J'ai testé de rajouter la référence dans le <a> de mes couleurs : <a href="{$link->getProductLink($product)|escape:'html':'UTF-8'}&ref={$REF}" Mais c'est pareil, l'url est transformé Merci pour votre aide Edited August 24, 2016 by ach34 (see edit history) Link to comment Share on other sites More sharing options...
ach34 Posted August 24, 2016 Author Share Posted August 24, 2016 (edited) Houlala .. c'est quoi ce windows.location C'est celui qui est dans getProductAttribute() à la fin... dans product.js function getProductAttribute() { // get every attributes values request = ''; ref = ''; //create a temporary 'tab_attributes' array containing the choices of the customer var tab_attributes = []; var radio_inputs = parseInt($('#attributes .checked > input[type=radio]').length); if (radio_inputs) radio_inputs = '#attributes .checked > input[type=radio]'; else radio_inputs = '#attributes input[type=radio]:checked'; $('#attributes select, #attributes input[type=hidden], ' + radio_inputs).each(function(){ tab_attributes.push($(this).val()); }); // build new request for (var i in attributesCombinations) for (var a in tab_attributes) if (attributesCombinations[i]['id_attribute'] === tab_attributes[a]) { request += '/' + attributesCombinations[i]['id_attribute'] + '-' + attributesCombinations[i]['group'] + attribute_anchor_separator + attributesCombinations[i]['attribute']; findCombination(); // pour MAJ reference ref = selectedCombination['reference']; } request = request.replace(request.substring(0, 1), '#/'); var url = window.location + ''; //alert(original_url); // redirection if (url.indexOf('#') != -1) url = url.substring(0, url.indexOf('#')); if ($('#customizationForm').length) { // set ipa to the customization form customAction = $('#customizationForm').attr('action'); if (customAction.indexOf('#') != -1) customAction = customAction.substring(0, customAction.indexOf('#')); $('#customizationForm').attr('action', customAction + request); } var param = "ref"; var regex = new RegExp("([?;&])" + param + "[^&;]*[;&]?"); var query = url.replace(regex, "$1").replace(/&$/, ''); newUrl = (query.length > 2 ? query + "&" : "?") + (ref ? param + "=" + ref : ''); window.location.replace(newUrl + request); } J'ai ajouté : var param = "ref"; var regex = new RegExp("([?;&])" + param + "[^&;]*[;&]?"); var query = url.replace(regex, "$1").replace(/&$/, ''); newUrl = (query.length > 2 ? query + "&" : "?") + (ref ? param + "=" + ref : ''); pour remplacer et passer ma référence en paramètre après je fais : {assign var="REF" value=$smarty.get.ref} {if $REFCOUL = $product->getColor($REF)|escape:'html':'UTF-8'} <p> Détails couleur : {$REFCOUL} </p> {/if} ça marche bien. Est-ce que le code est propre ? Je ne sais pas si c'est la meilleur méthode... Dans tous les cas, c'est dommage que Prestashop n'est pas prévu de renvoyer la référence produit dans une variable... ça oblige à bidouiller alors que pour ma logique, la référence d'un produit est une information de base. Normalement, une url bien réalisé devrait permettre de retrouver automatique la référence d'un produit ou au moins l'ID de sa référence.... Edited August 24, 2016 by ach34 (see edit history) 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