Заполнение полей адреса по почтовому индексу
Заполнение полей адреса по почтовому индексу
В PrestaShop 1.4 появилась дополнительная вкладка «Округа», в которой можно вводить округа (города) и список почтовых индексов, которые к ним принадлежат. Однако эти данные нигде не используются.
Связь округов с почтовыми индексами и регионами можно использовать для автоматического заполнения некоторых адресных полей при вводе покупателем почтового индекса. Для этого будем использовать ajax.
Клиентский скрипт разместим в подключаемом при вводе адреса файле /themes/prestashop/js/tools/statesManagement.js. Дополнительный код добавим после:
$(document).ready(function(){
$("#postcode").keyup(function(){ if($(this).val().length > 5){ //После ввода шестого символа индекса отправляем запрос на ajaxzip.php $.ajax({ type: "POST", url: 'ajaxzip.php', dataType : "json", data: "zip_code="+$(this).val(), success: function(data) { //После получения ответа заполняем город и регион $("#city").val(data.city_name); $("#id_state [value='"+data.region_id+"']").attr("selected", "selected"); } }); } });
Серверный скрипт ajaxzip.php, расположенный в корне сайта будет возвращать номер региона и название города.
<?php require_once(dirname(__FILE__).'/config/config.inc.php'); //По почтовому индексу получаем из базы название города и номер региона $region_data=Db::getInstance(_PS_USE_SQL_SLAVE_)->GetRow(' SELECT c.`name`, c.`id_state` FROM `'._DB_PREFIX_.'county_zip_code` czc JOIN `'._DB_PREFIX_.'county` c ON (c.`id_county`=czc.`id_county`) WHERE czc.`from_zip_code`='.(int)Tools::GetValue('zip_code')); //Формируем ответ в формате ajax echo (' { "city_name": "'.$region_data['name'].'", "region_id": "'.$region_data['id_state'].'" } ');
Посмотреть, что получилось в результате можно здесь http://demo.prestalab.ru/authentication (используется база индексов почты России, включенная в состав локализатора)