Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


Recommended Posts

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

В симпле перезагрузка включена, в чем может быть проблема?

 

и второй вопрос продублирую

23 часа назад, Skiffjkee сказал:

Может кто замечал икой же баг, как у меня.

 

Например регион Ненецкий автономный округ, город Нарьян-Мар. При ввогде города вылеиет регион Ямало-Ненецкий автономный округ.

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

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

 

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

Link to comment
Share on other sites


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

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

Link to comment
Share on other sites


@pimur

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

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

Link to comment
Share on other sites


В 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]
      }
  }
});

 

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

Link to comment
Share on other sites


В 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);
    }
}

 

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

Link to comment
Share on other sites


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

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

simple ?

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

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

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

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

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

Циии

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

 

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

Link to comment
Share on other sites


 Проблему с неверным опрегделением региона полулилось победить 
 
Нужно сопосивить каждому номеру 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

Link to comment
Share on other sites


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


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

Link to comment
Share on other sites


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

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

Link to comment
Share on other sites


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

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

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

Link to comment
Share on other sites


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

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

Link to comment
Share on other sites


Всем привет.

Стоит модуль 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

 

Spoiler

 

 

 

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);

 

 

Edited by Starychenko
Link to comment
Share on other sites


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

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

 

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

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

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

// Ваш 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);

Спасипотому что!

Edited by Seax
Link to comment
Share on other sites


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

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

 

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

 

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

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

 

Link to comment
Share on other sites

В 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()

Link to comment
Share on other sites


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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.