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

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

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

Обсуждение

Saerty, 2011/09/18 18:05

Отличное, простое и очень изящное решение! А главное легко сделать.

Малыхин Денис, 2012/03/06 13:36

Еще бы и страну выбирало бы

Сергей, 2012/09/19 14:03

СУпер! Огромное человеческое спасибо!

Дмитрий, 2012/10/30 17:22

а под престу 1.5 этот код можно использовать?

Вячеслав, 2013/03/18 01:46

Добавьте пожалуйста в код файла ajaxzip.php тег, закрывающий код PHP

?> я, как человек далекий от пхп - пол часа тупил и не понимал, почему не работает. Думаю ,я не один такой. Спасибо за решение

Дмитрий, 2013/03/18 05:53

Возможно ли как нибудь подключить КЛАДР - где более актуальные почтовые индексы?

Дмитрий, 2013/03/20 13:36

Возможно ли как нибудь подцепить поля заполнения адреса к ФИАСУ ? http://basicdata.ru/api/fias/

Дмитрий, 2013/04/22 12:27

Выложите, где нибудь рабочие файлы для prestashop 1.5? а то я код вставляю у меня ничего не работает

Арркадий, 2013/07/03 01:06

Всё работает на 1.5. Может вы скриптик не закрыли? ?> - в конец PHP файла

Алексей, 2014/08/24 23:44

А в 1.6 есть что-нибудь подобное?

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