Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Модуль Модуль подсказок Dadata, автозаполнение полей Ф.И.О, Адреса, данные по ИНН [Поддержка]


Recommended Posts

Заметил такую особенность, что именно на мобильной версии не срабатывает перезагрузка поля, когда вводишь или изменяешь блоки город, адрес, индекс.
В симпле перезагрузка включена, в чем может быть проблема?
 
и второй вопрос продублирую
 
Таких случаев хватает, например если город Омск, то всегда по разному срабатывает определение области, Омская или Томская. На сколько понимаю, проблема в дадате, что нет четкой привязки между регионами модуля и регионами самого опенкарта?
https://dadata.ru/api/suggest/address/#response
Настроить ключи под свои потребности. В методах format city и т.д
Смотреть какой ключ к какому относится в ответе и смотреть в собранный конфиг там где ключи прописаны

Отправлено с моего Redmi Note 9 Pro через Tapatalk

Надіслати
Поділитися на інших сайтах


@pimur

Увы, понимание что и как править нет.

На сколько понимаю, ошибка в некорректном подставлении региона и не происходит перезагрузка в мобильной версии - это проблема в коде?

Надіслати
Поділитися на інших сайтах


В 27.02.2021 в 03:25, Sha сказал:

Переключать страны можно, например, так.


var $city = $('#shipping_address_city')
var $country = $('#shipping_address_country_id')
var country_text = $country.find(":selected").text()

var list_resolve = {"Белоруссия (Беларусь)": "Беларусь", "Казахстан": "Казахстан", "Украина": "Украина", "Российская Федерация": "Россия"}

if(!list_resolve[country_text])
  return false

$city.suggestions({
  token: token,
  type: 'ADDRESS',
  bounds: "city-settlement",
  geoLocation: false,
  constraints: {
      locations: {
        country: list_resolve[country_text]
      }
  }
});

 

Спасибо большое, теперь у меня модуль включается только для России.

Надіслати
Поділитися на інших сайтах


В 27.02.2021 в 16:41, pimur сказал:

https://dadata.ru/api/suggest/address/#response
Настроить ключи под свои потребности. В методах format city и т.д
Смотреть какой ключ к какому относится в ответе и смотреть в собранный конфиг там где ключи прописаны

Отправлено с моего Redmi Note 9 Pro через Tapatalk
 

 Проблему с неверным определением региона получилось победить 

 

Нужно сопоставить каждому номеру kladr_id региона (их можно посмотреть на https://github.com/hflabs/region/blob/master/region.csv) и составить такую карту соответствия:

var REGION_MAPPING = {
  "2200000000000": "2726", // Алтайский край
  "2800000000000": "2729", // Амурская обл
  ...
};

Дальше эту карту можно использовать в formatRegion() примерно так:

function formatRegion(address) {
    $postcode.val(address.postal_code || '');
    if (address.region_kladr_id) {
        var region_num = REGION_MAPPING[address.region_kladr_id];
        $region.val(region_num);
    }
}

 

Остался открытый вопрос, почему перезагрузка не работает на мобильной версии, когда вводится город или когда изменяется. На компе все отлично работает...

Надіслати
Поділитися на інших сайтах


48 минут назад, Skiffjkee сказал:

почему перезагрузка не работает на мобильной версии, когда вводится город или когда изменяется. На компе все отлично работает

simple ?

Надіслати
Поділитися на інших сайтах

тогда нужно искать причину в simple она отвечает за перезагрузку.

можно конечно и принудительно, но зачем)

Надіслати
Поділитися на інших сайтах

10 минут назад, Sha сказал:

тогда нужно искать причину в simple она отвечает за перезагрузку.

можно конечно и принудительно, но зачем)

Раньше задавал вопрос в теме симпл, ответ был:

Цитата

Нет никаких особенностей до тех пор, пока код не правится. Вопрос нужно задать автору скриптов дадаты

 

На сколько понимаю, в коде что то дописать надо...

Надіслати
Поділитися на інших сайтах


 Проблему с неверным определением региона получилось победить 
 
Нужно сопоставить каждому номеру kladr_id региона (их можно посмотреть на https://github.com/hflabs/region/blob/master/region.csv) и составить такую карту соответствия:
var REGION_MAPPING = { "2200000000000": "2726", // Алтайский край "2800000000000": "2729", // Амурская обл ...};

Дальше эту карту можно использовать в formatRegion() примерно так:

function formatRegion(address) {   $postcode.val(address.postal_code || '');   if (address.region_kladr_id) {       var region_num = REGION_MAPPING[address.region_kladr_id];       $region.val(region_num);   }}

 
Остался открытый вопрос, почему перезагрузка не работает на мобильной версии, когда вводится город или когда изменяется. На компе все отлично работает...

Спасибо.

Отправлено с моего Redmi Note 9 Pro через Tapatalk

Надіслати
Поділитися на інших сайтах


[mention=678008]Sha[/mention] Да!
Работает. Нужно куда то кликнуть или Тап после выбора. То есть в мобильном события происходит, когда вы выбрали и убрали фокус с поля.


Отправлено с моего Redmi Note 9 Pro через Tapatalk

Надіслати
Поділитися на інших сайтах


Sha есть смысл разово взять соответствия регионов и просто в return возвращать строку json
Тогда каждый может дергать эти соответствия регионов если понадобится.
Да и в целом в моем примере в методе format region вроде так называется. Поправить на обращение к этому json

Отправлено с моего Redmi Note 9 Pro через Tapatalk

Надіслати
Поділитися на інших сайтах


5 часов назад, pimur сказал:

Работает. Нужно куда то кликнуть или Тап после выбора. То есть в мобильном события происходит, когда вы выбрали и убрали фокус с поля.
 

Не работает на мобиле! Модули доставок (СДЭК и Почта России) не перезагружаются...

Надіслати
Поділитися на інших сайтах


Не работает на мобиле! Модули доставок (СДЭК и Почта России) не перезагружаются...
Доступы в личку. Посмотрю в течении пару дней.

Отправлено с моего Redmi Note 9 Pro через Tapatalk

Надіслати
Поділитися на інших сайтах


Всем привет.

Стоит модуль Simple регистрация и чекаут.
Настроить DaData на роуте checkout/simplecheckout и account/simpleregister удалось.
По инструкции все сделал, работают все подсказки, все как следует.

Но никак не получается завести DaData в личном кабинете но роутах account/simpleedit и account/simpleaddress/update

Для примера на account/simpleaddress/update стоит код из третьего спойлера ниже.
Макет для него создал (для всех роутов делал отдельный макет).
Селекторы я поменял на свои. Во всех роутах они разные, поменял для каждого нужный.
Все коды вызова из Simple ниже.


Кто что может подсказать ? Что нужно сделать, чтобы запустить его ?

if('checkout_simplecheckout' in window) checkout_simplecheckout();
if('account_simpleaddress/update ' in window) account_simpleaddress/update ();
if('account_simpleedit' in window) account_simpleedit();
if('account_simpleregister' in window) account_simpleregister();


  

Spoiler

1242504958_.thumb.png.b19044b37db6a7c6d78c18ec37a37e7d.png

 

Spoiler

 

379865485_.thumb.png.e2d63a82309f8098788fdc6706ecc563.png

 

 

Spoiler

// Для блока адресс
function checkAddress($city, $address, $postcode, $region) {
    // Если инпут города нету выходим
    if (!$city.length) return;
    var type = 'ADDRESS';
    $city.suggestions({
        token: token,
        type: type,
        bounds: "city-settlement",
        geoLocation: false,
        onSelect: enforceCity,
        onSelectNothing: enforceCity,
        formatSelected: formatCitySelected
    });

    $address.suggestions({
        token: token,
        type: type,
        onSelect: restrictAddressValue,
        formatSelected: formatSelected
    });

    // Если на поле адрес есть перезагрузка поля
    var p = $postcode.val() || "";
    var a = $address.val() || "";
      
    $city.on("suggestions-fixdata",
      function(e, suggestion) {
        //console.log(suggestion);
        $address.val(a);
      	$postcode.val(p)
      }
    );

    $city.suggestions().fixData();

    function setConstraints(sgt, kladr_id) {
        var restrict_value = false;
        var locations = null;
        if (kladr_id) {
            locations = {
                kladr_id: kladr_id
            };
            restrict_value = true;
        }
        sgt.setOptions({
            constraints: {
                locations: locations
            },
            restrict_value: restrict_value
        });
    }

    function enforceCity(suggestion) {
        var sgt = $address.suggestions();
        sgt.clear();
        if (suggestion) {
            setConstraints(sgt, suggestion.data.kladr_id);
            formatRegion(suggestion.data);
        } else {
            setConstraints(sgt, null);
        }
    }

    function formatCitySelected(suggestion) {
        var address = suggestion.data;
        if (address.city_with_type === address.region_with_type) {
            return address.settlement || address.city || "";
        } else {
            return join([
                address.city,
                address.settlement
            ]);
        }
    }

    function formatRegion(address) {
        $postcode.val(address.postal_code || '');
        if ($region.length) {
            var result = address.region.replace(/\s{0,1}[-\/].+/gi, '').toLowerCase();
            $region.find('option').each(function (i, o) {
                if ($(o).text().toLowerCase().search(result) >= 0) $(this).attr('selected', true);
                else $(this).attr('selected', false);
            });
        }
    }

    function restrictAddressValue(suggestion) {
        var citySgt = $city.suggestions();
        var addressSgt = $address.suggestions();
        if (!citySgt.currentValue) {
            citySgt.setSuggestion(suggestion);
            var city_kladr_id = suggestion.data.kladr_id.substr(0, 13);
            setConstraints(addressSgt, city_kladr_id);
        }
    }

    function formatSelected(suggestion) {
        var addressValue = makeAddressString(suggestion.data);
        return addressValue;
    }

    function makeAddressString(address) {
        formatRegion(address);

        return join([
            address.street_with_type,
            join([address.house_type, address.house,
                address.block_type, address.block
            ], " "),
            join([address.flat_type, address.flat], " ")
        ]);
    }

    function join(arr /*, separator */ ) {
        var separator = arguments.length > 1 ? arguments[1] : ", ";
        return arr.filter(function (n) {
            return n
        }).join(separator);
    }
}
// Для блока адресс берем в переменные нужные инпуты
var $city = $('#address_city');
var $address = $('#address_address_1');
var $postcode = $('#address_postcode');
var $zoneId = $('#address_zone_id');
// Для блока адресс вызов
checkAddress($city, $address, $postcode, $zoneId);

 

 

Змінено користувачем Starychenko
Надіслати
Поділитися на інших сайтах


@Starychenko дайте ссылку на сайт, что-бы мы смогли вам помочь. можно ив личку.

  • +1 1
Надіслати
Поділитися на інших сайтах

33 минуты назад, dantes011 сказал:

Подскажите с чем связана такая ошибка

 

Screenshot_1.png

Проверьте настройки ftp.
или обновите страницу что-бы проверить не прервалась ли сессия.

Надіслати
Поділитися на інших сайтах

  • 1 month later...
7 минут назад, Seax сказал:

Как сделать так, чтобы при выборе подсказки фокус не оставался внутри ввода информации?

например, средствами js перевести фокус на следующее поле.

Надіслати
Поділитися на інших сайтах

Подскажите, какой код и куда вставить?

// Ваш api ключ из лк дадаты https://dadata.ru/#registration_popup
var token = "тут токен"
// Для блока адресс
function checkAddress($city, $address, $postcode, $region) {
    // Если инпут города нету выходим
    if (!$city.length) return;
    var type = 'ADDRESS';
    $city.suggestions({
        token: token,
        type: type,
        bounds: "city-settlement",
        /*geoLocation: false,*/
      	geoLocation: [{"kladr_id": "50"}, {"kladr_id": "77"}],
        onSelect: enforceCity,
        onSelectNothing: enforceCity,
        formatSelected: formatCitySelected
    });

    $address.suggestions({
        token: token,
        type: type,
        onSelect: restrictAddressValue,
        formatSelected: formatSelected
    });

    // Если на поле адрес есть перезагрузка поля
    var p = $postcode.val() || "";
    var a = $address.val() || "";

    $city.on("suggestions-fixdata",
      function(e, suggestion) {
        // console.log(suggestion);
        $address.val(a);
      	$postcode.val(p)
      }
    );

    $city.suggestions().fixData();

    function setConstraints(sgt, kladr_id) {
        var restrict_value = false;
        var locations = null;
        if (kladr_id) {
            locations = {
                kladr_id: kladr_id
            };
            restrict_value = true;
        }
        sgt.setOptions({
            constraints: {
                locations: locations
            },
            restrict_value: restrict_value
        });
    }

    function enforceCity(suggestion) {
        var sgt = $address.suggestions();
        sgt.clear();
        if (suggestion) {
            setConstraints(sgt, suggestion.data.kladr_id);
            formatRegion(suggestion.data);
        } else {
            setConstraints(sgt, null);
        }
    }

    function formatCitySelected(suggestion) {
        var address = suggestion.data;
        if (address.city_with_type === address.region_with_type) {
            return address.settlement || address.city || "";
        } else {
            return join([
                address.city,
                address.settlement
            ]);
        }
    }

    function formatRegion(address) {
        $postcode.val(address.postal_code || '');
        if ($region.length) {
            var result = address.region.replace(/\s{0,1}[-\/].+/gi, '').toLowerCase();
            $region.find('option').each(function (i, o) {
                if ($(o).text().toLowerCase().search(result) >= 0) $(this).attr('selected', true);
                else $(this).attr('selected', false);
            });
        }
    }

    function restrictAddressValue(suggestion) {
        var citySgt = $city.suggestions();
        var addressSgt = $address.suggestions();
        if (!citySgt.currentValue) {
            citySgt.setSuggestion(suggestion);
            var city_kladr_id = suggestion.data.kladr_id.substr(0, 13);
            setConstraints(addressSgt, city_kladr_id);
        }
    }

    function formatSelected(suggestion) {
        var addressValue = makeAddressString(suggestion.data);
        return addressValue;
    }

    function makeAddressString(address) {
        formatRegion(address);

        /*return join([
            address.city_district_with_type,
          	address.street_with_type,
            join([address.house_type, address.house,
                address.block_type, address.block
            ], " "),
            join([address.flat_type, address.flat], " ")
        ]);*/
    }

    function join(arr /*, separator */ ) {
        var separator = arguments.length > 1 ? arguments[1] : ", ";
        return arr.filter(function (n) {
            return n
        }).join(separator);
    }
}
// Для блока адресс берем в переменные нужные инпуты
var $city = $('#shipping_address_city');
var $address = $('#shipping_address_address_1');
var $postcode = $('#shipping_address_postcode');
var $zoneId = $('#shipping_address_zone_id');
// Для блока адресс вызов
checkAddress($city, $address, $postcode, $zoneId);

Спасибо!

Змінено користувачем Seax
Надіслати
Поділитися на інших сайтах


Здесь в зависимости от потребности зачем вам снимать фокус

можно, например, по событию suggestion onSelectNothing: выполнить элемент.blur();

 

можно, как писал выше определить следующий input и перевести на него фокус input.focus();

 

если Вы это сделать хотите для того, что-бы обновилась simple то лучше воспользоваться одним из событий/колбеков  https://confluence.hflabs.ru/pages/viewpage.action?pageId=207454320 

или что-бы принудительно обновить simple у него есть метод reloadAll()

 

Надіслати
Поділитися на інших сайтах

В 24.04.2021 в 22:42, Sha сказал:

Здесь в зависимости от потребности зачем вам снимать фокус

можно, например, по событию suggestion onSelectNothing: выполнить элемент.blur();

 

можно, как писал выше определить следующий input и перевести на него фокус input.focus();

 

если Вы это сделать хотите для того, что-бы обновилась simple то лучше воспользоваться одним из событий/колбеков  https://confluence.hflabs.ru/pages/viewpage.action?pageId=207454320 

или что-бы принудительно обновить simple у него есть метод reloadAll()

 

Да. Спасибо за совет! Воспользовался reloadAll()

Надіслати
Поділитися на інших сайтах


  • 1 month later...

Добрый день!

Писал в личку, на всякий случай продублирую здесь:

 

 

 

Планирую купить Ваш модуль, чтобы:

1. Уменьшить количество ошибок ввода адресов пользователей с последующим некорректным расчетом (или его отсутствием) модулей СДЭК [Доставка] (https://docs.lutylab.ru/ll_cdek)

2. Уменьшить количество полей на заполнение

 

Вопросы:

1. Совместим ли с Lightshop (OC2.3.0.2)?

2. Совместим ли с указанным выше модулем доставки СДЭК?

3. Что входит в услугу настройки?

Спасибо

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.