spiff33 Posted May 2, 2013 Share Posted May 2, 2013 Bonjour, est il possible de faire des frais de port differents suivant le lieu de livraison ? Je m'explique: - Frais de ports gratuit pour les parisiens - Hors paris intramuros 15 euros - Hors de france 45 euros Merci pour vos réponses éventuelles Link to comment Share on other sites More sharing options...
Vectorus Posted May 2, 2013 Share Posted May 2, 2013 (edited) Je ne sais pas ce que ça vaut, mais j'ai vu un module qui peut correspondre à votre demande il y a quelque temps : http://www.ecomiz.co...co-de-port.html Je vous invite à vous renseigner sur la compatibilité et si il est effectivement capable de répondre à vos besoins. Edit: à j'avais ça aussi : http://www.magavenue.com/blog/prestashop/prestashop-franco-de-port Edited May 2, 2013 by Vectorus (see edit history) Link to comment Share on other sites More sharing options...
spiff33 Posted May 6, 2013 Author Share Posted May 6, 2013 merci pour ces réponses je vais étudier ça de près Link to comment Share on other sites More sharing options...
steakalive Posted May 6, 2013 Share Posted May 6, 2013 Bonjour, Sans module, il est possible de définir la France comme étant un pays contenant des états (dans ce cas, les états seront des départements ou des zones). Ensuite vous pouvez associer ces départements au transporteur et définir un prix de transport pour chaque département ou zone (et même pour différente tranche de poids). http://prestashoptuto.wordpress.com/2009/11/25/parametrage-tarif-transport-prestashop/ Personnellement, en plus d'avoir fait ça pour le site http://www.exolar.fr/boutique/, j'ai fait en sorte que la saisi du code postal dans l'adresse de livraison détermine automatiquement la zone "transporteur". J'ai ajouté et grisé le champs dans le formulaire d'adresse /theme/default/adress.tpl ~l196 {if $field_name eq 'State:name'} {assign var="stateExist" value="true"} <p class="required id_state select"> <label for="id_state">{l s='State'} </label> <select name="id_state" id="id_state" disabled="disabled"> <option value="">-</option> </select> </p> {/if} {/foreach} {if $stateExist eq "false"} <p class="required id_state select"> <label for="id_state">{l s='State'} </label> <select name="id_state" id="id_state" disabled="disabled"> <option value="">-</option> </select> </p> {/if} et modifié /controller/adresscontroller.php ~l170 pour que la validation du formulaire définisse la zone en fonction du code postal par exemple : $tabZ1a = array(75000, 75001); foreach ($tabZ1a as $i){ if ((int)(substr($postcode, 0, 5)) == $i) $address->id_state = 423; /* <- ici l'id de la zone créée */ } En espérant que ça aide... Link to comment Share on other sites More sharing options...
PascaleB Posted May 6, 2013 Share Posted May 6, 2013 Bonjour Steakalive, Merci pour tes indications. Pourrais-tu nous préciser sur quelle version tu as fait cette modif, stp ? Et quelles sont les lignes qui précèdent ton code dans /controller/adresscontroller.php ? Link to comment Share on other sites More sharing options...
steakalive Posted May 7, 2013 Share Posted May 7, 2013 Bonjour, J'utilise Prestashop 1.5.0.17 ça fait un petit moment que je l'ai fait et je ne me rappelle plus trop des détails... ...mais voici le code qui précède l'exemple que j'ai donné pour /controller/adresscontroller.php : // Check country zip code $zip_code_format = $country->zip_code_format; if ($country->need_zip_code) { if (($postcode = Tools::getValue('postcode')) && $zip_code_format) { if (!$country->checkZipCode($postcode)) $this->errors[] = sprintf( Tools::displayError('Zip/Postal code is invalid. Must be typed as follows: %s'), str_replace('C', $country->iso_code, str_replace('N', '0', str_replace('L', 'A', $country->zip_code_format))) ); } else if ($zip_code_format) $this->errors[] = Tools::displayError('Zip/Postal code is required.'); else if ($postcode && !preg_match('/^[0-9a-zA-Z -]{4,9}$/ui', $postcode)) $this->errors[] = sprintf( Tools::displayError('Zip/Postal code is invalid. Must be typed as follows: %s'), str_replace('C', $country->iso_code, str_replace('N', '0', str_replace('L', 'A', $country->zip_code_format))) ); Link to comment Share on other sites More sharing options...
PascaleB Posted May 8, 2013 Share Posted May 8, 2013 Voilà, c'est beaucoup plus claire pour moi puisque sous ma version, ce code en 200 lignes plus bas. Merci ! Link to comment Share on other sites More sharing options...
PascaleB Posted May 15, 2013 Share Posted May 15, 2013 Finalement, j'ai assigné le numéro de département de façon dynamique avec référence à la base de données. C'est plus pratique étant donné que j'ai des tarifs régionaux et nationaux et que j'ai rentré tous les départements français en admin dans les états. Dans controllers/front/AddressController.php, j'ai mis en dessous de /****** MON CODE ******/ : // Check country zip code $zip_code_format = $country->zip_code_format; if ($country->need_zip_code) { if (($postcode = Tools::getValue('postcode')) && $zip_code_format) { if (!$country->checkZipCode($postcode)) $this->errors[] = sprintf( Tools::displayError('Zip/Postal code is invalid. Must be typed as follows: %s'), str_replace('C', $country->iso_code, str_replace('N', '0', str_replace('L', 'A', $country->zip_code_format))) ); } else if ($zip_code_format) $this->errors[] = Tools::displayError('Zip/Postal code is required.'); else if ($postcode && !preg_match('/^[0-9a-zA-Z -]{4,9}$/ui', $postcode)) $this->errors[] = sprintf( Tools::displayError('Zip/Postal code is invalid. Must be typed as follows: %s'), str_replace('C', $country->iso_code, str_replace('N', '0', str_replace('L', 'A', $country->zip_code_format))) ); /********************* DEBUT DE MON CODE **************************************************************************************************/ $cp = (int)(substr($postcode, 0, 2)); // récup n° departement $sql = 'SELECT id_state FROM '._DB_PREFIX_.'state WHERE id_country ='.$country->id.' AND iso_code ='.$cp; $departement = Db::getInstance()->executeS($sql); $address->id_state = $departement[0]['id_state']; // clé primaire du departement /********************* FIN DE MON CODE *******************************************************************************************************/ } et j'ai aussi commenté l'appel du message d'erreur si l'état n'est pas renseigné en ligne 168 : /*if ((int)$country->contains_states && !(int)$address->id_state) $this->errors[] = Tools::displayError('This country requires a state selection.');*/ 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