Заполнение полей адреса по почтовому индексу

Заполнение полей адреса по почтовому индексу

В 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 (используется база индексов почты России, включенная в состав локализатора)

zapolnenie-polej-adresa-po-pochtovomu-indeksu.txt · Последние изменения: 2015/12/27 16:22 (внешнее изменение)