Jumk Posted June 3, 2010 Share Posted June 3, 2010 Bonjour à tous,Après maintes recherches sur le forum et sur internet en général je poste donc ce Topic. =)Problématique :Je souhaite avoir deux adresses de livraisons par défaut lors de la commande. l'adresse du client et l'enlèvement à l'entrepôt (à mon magasin)Le client a bel et bien son adresse à lui par défaut (il a même la possibilité d'en créer à volonté et c'est sympa ^^)ma question :Peut-on forcer l'apparition de l'adresse de mon entrepôt dans la liste des adresses ?Merci d'une réponse.Bonne journée à tous !!P.S : Ci-joint un petit écran de là où se situe ma question. Link to comment Share on other sites More sharing options...
Jumk Posted June 7, 2010 Author Share Posted June 7, 2010 Petit up... Personne n'aurait une solution ? Link to comment Share on other sites More sharing options...
Nicol@$ Posted June 7, 2010 Share Posted June 7, 2010 Je l'ai fais sur Virtuemart et ça implique quelques modifications dans le code.- Le plus simple pour toi serait de modifier le terme "mon adresse" par "mon adresse où retrait à l'entrepôt" et à l'étape suivante le client sélectionne la case "l’enlèvement à l’entrepôt" (personnellement je ferais ça).- Sinon il faut se débrouiller pour que lors de la création d'un compte l'adresse de l'entrepôt soit ajouté pour chaque client.Après je ne connais pas encore bien Prestashop. Peu-être qu'il est possible de faire ceci plus facilement. Link to comment Share on other sites More sharing options...
ArnaudDRP Posted June 24, 2010 Share Posted June 24, 2010 J'ai le même soucis que toi l'ami... J'essaie de trouver une solution, en remuant un peu le code, je te tiens au courant. Link to comment Share on other sites More sharing options...
Jumk Posted June 24, 2010 Author Share Posted June 24, 2010 Ayant beaucoup d'autres choses à faire, je suis sur autre chose maintenant ^^ mais si tu as une solution je suis preneur et cela m'arrangerai ! =) Link to comment Share on other sites More sharing options...
ArnaudDRP Posted June 25, 2010 Share Posted June 25, 2010 Bon j'ai trouvé une solution mais je suis allé au fin fond de l'enfer pour la trouver...En gros, si j'ai bien compris, ce que tu veux faire c'est mettre dans ta liste de d'adresses une adresse "entrepot", c'est ça?Bon ce qu'il faut faire c'est que :- rajouter les entrepôts dans ta base :je suis allé dans ma base de donnée j'ai créé à la main une adresse entrepôt (j'en ai créé une bidon dans le backoffice puis je l'ai modifiée) et j'ai mis le champ supplier à 1, (normalement, cette colonne n'est pas fait pour ça mais comme elle ne me servait à rien je l'utilise pour détecter que c'est un entrepôt... système D).- créer une fonction pour aller chercher les adresses client ET les adresses entrepôts :dans /classes/Customer.php, je duplique la fonction getAddresses(), je l'appelle getAddressesDelivery() et je la défini ainsi : public function getAddressesDelivery($id_lang) { return Db::getInstance()->ExecuteS(' SELECT a.*, cl.`name` AS country, s.name AS state FROM `'._DB_PREFIX_.'address` a LEFT JOIN `'._DB_PREFIX_.'country` c ON (a.`id_country` = c.`id_country`) LEFT JOIN `'._DB_PREFIX_.'country_lang` cl ON (c.`id_country` = cl.`id_country`) LEFT JOIN `'._DB_PREFIX_.'state` s ON (s.`id_state` = a.`id_state`) WHERE (`id_lang` = '.intval($id_lang).' AND `id_customer` = '.intval($this->id).' AND a.`deleted` = 0) OR (`id_lang` = '.intval($id_lang).' AND a.`id_supplier` = 1 AND a.`deleted` = 0) '); } - récupérer les adresses de livraison dans un tableau global à part :Dans /order.php, ligne 280 environ /* Getting customer addresses */ $customerAddresses = $customer->getAddresses(intval($cookie->id_lang)); $smarty->assign('addresses', $customerAddresses); //rajoute ça de là $deliveryAddresses = $customer->getAddressesDelivery(intval($cookie->id_lang)); $smarty->assign('addresses_delivery', $deliveryAddresses); //à là - sauvegarder ce tableau afin qu'il soit accessible dans javascript (pour l'affichage) :Dans /themes/"MONTHEME"/order-address.tpl, au tout début il y a une petite section javascript, tu rajoute ça : [removed] <!-- var baseDir = '{$base_dir_ssl}'; var addresses = new Array(); {foreach from=$addresses key=k item=address} addresses[{$address.id_address|intval}] = new Array('{$address.company|addslashes}', '{$address.firstname|addslashes}', '{$address.lastname|addslashes}', '{$address.address1|addslashes}', '{$address.address2|addslashes}', '{$address.postcode|addslashes}', '{$address.city|addslashes}', '{$address.country|addslashes}', '{$address.state|default:''|addslashes}'); {/foreach} /*de là*/ var addresses_delivery = new Array(); {foreach from=$addresses_delivery key=k item=address} addresses_delivery[{$address.id_address|intval}] = new Array('{$address.company|addslashes}', '{$address.firstname|addslashes}', '{$address.lastname|addslashes}', '{$address.address1|addslashes}', '{$address.address2|addslashes}', '{$address.postcode|addslashes}', '{$address.city|addslashes}', '{$address.country|addslashes}', '{$address.state|default:''|addslashes}'); {/foreach} /*à de là*/ --> [removed] Link to comment Share on other sites More sharing options...
ArnaudDRP Posted June 25, 2010 Share Posted June 25, 2010 Ensuite!- modifier le input (bouton de choix des adresses de livraison) :Vers la ligne 30 de order-address.tpl, tu dois avoir un dont l'identifiant est id_address_delivery, tu le change en ça {foreach from=$addresses_delivery key=k item=address} id_address_delivery}selected="selected"{/if}>{$address.alias|escape:'htmlall':'UTF-8'} {/foreach} Ensuite et enfin!- modifier l'affichage pour que l'adresse de livraison change avec le sélectionSi cette opération est mal faite, ça se voit parce que aucune des deux adresses (livraison et facturation) ne s'afficheront.Dans /themes/"MONTHEME"/js/order-address.js, au début de la fonction updateAddressDisplay() de la ligne 39, tu rajoute un gros if bien bourrin: if(addressType=="delivery"){ var idAddress = $('select#id_address_' + addressType + '').val(); $('ul#address_' + addressType + ' li.address_company').html(addresses_delivery[idAddress][0]); if(addresses_delivery[idAddress][0] == '') $('ul#address_' + addressType + ' li.address_company').hide(); else $('ul#address_' + addressType + ' li.address_company').show(); $('ul#address_' + addressType + ' li.address_name').html(addresses_delivery[idAddress][1] + ' ' + addresses_delivery[idAddress][2]); $('ul#address_' + addressType + ' li.address_address1').html(addresses_delivery[idAddress][3]); $('ul#address_' + addressType + ' li.address_address2').html(addresses_delivery[idAddress][4]); if(addresses_delivery[idAddress][4] == '') $('ul#address_' + addressType + ' li.address_address2').hide(); else $('ul#address_' + addressType + ' li.address_address2').show(); $('ul#address_' + addressType + ' li.address_city').html(addresses_delivery[idAddress][5] + ' ' + addresses_delivery[idAddress][6]); $('ul#address_' + addressType + ' li.address_country').html(addresses_delivery[idAddress][7] + (addresses_delivery[idAddress][8] != '' ? ' (' + addresses_delivery[idAddress][8] +')' : '')); // change update link var link = $('ul#address_' + addressType + ' li.address_update a').attr('href'); var expression = /id_address=\d+/; link = link.replace(expression, 'id_address='+idAddress); $('ul#address_' + addressType + ' li.address_update a').attr('href', link); } else{ var idAddress = $('select#id_address_' + addressType + '').val(); $('ul#address_' + addressType + ' li.address_company').html(addresses[idAddress][0]); ... Voilà... pfff regarde moi ce bordel! La croix et la bannière pour changer un truc évident, bref... Bonne chance! 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