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

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


Recommended Posts

  В 21.02.2021 в 20:59, pimur сказав:

добавить

account/simpleaddress/insert

account/simpleaddress/update

 

Expand  

Вроде всё добавил, сохранил, включил, обновил, но insert и update не работает. Где копать?

java.PNG

insert.PNG

update.PNG

city.PNG

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


  В 22.02.2021 в 19:50, garik сказав:
Вроде всё добавил, сохранил, включил, обновил, но insert и update не работает. Где копать?
spacer.png
spacer.png
spacer.png
spacer.png
if ('account_simpleaddress_insert' in window') account_simpleaddress_insert();
В javascript вкладку симплы. Обратите внимание _insert, _update

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

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


  В 23.02.2021 в 06:13, pimur сказав:

if ('account_simpleaddress_insert' in window') account_simpleaddress_insert();
В javascript вкладку симплы. Обратите внимание _insert, _update

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

Expand  

Спасибо!!! Получилось!

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


@Sha Добрый день!

 

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

Код для симпла без отчества есть https://opencartforum.com/files/tutorials/496-{%3F}/

Можно аналогичный код, но где к имени добавлено отчество?

 

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


  В 23.02.2021 в 12:57, Skiffjkee сказав:

Можно аналогичный код, но где к имени добавлено отчество?

Expand  
function initName($surname, $name) {
    // Если инпута фамилия или имя нету, выходим
    if (!$surname.length || !$name.length) return;
    $surname.suggestions({
            token: token,
            type: "NAME",
            triggerSelectOnSpace: false,
            hint: "",
            noCache: true,
            params: {
                // каждому полю --- соответствующая подсказка
                parts: ['SURNAME']
            }
        });
  	$name.suggestions({
            token: token,
            type: "NAME",
            triggerSelectOnSpace: false,
            hint: "",
            noCache: true,
            params: {
                // каждому полю --- соответствующая подсказка
                parts: ['NAME', 'PATRONUMIC']
            }
        });
};

 

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


@pimur Не работает, в имени вообще нет никаких подсказок тогда...

Вот полный код с заменой

 

// Ваш 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,
        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 = $('#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);

// Для блока имени, фамилия
function initName($surname, $name) {
    // Если инпута фамилия или имя нету, выходим
    if (!$surname.length || !$name.length) return;
    $surname.suggestions({
            token: token,
            type: "NAME",
            triggerSelectOnSpace: false,
            hint: "",
            noCache: true,
            params: {
                // каждому полю --- соответствующая подсказка
                parts: ['SURNAME']
            }
        });
  	$name.suggestions({
            token: token,
            type: "NAME",
            triggerSelectOnSpace: false,
            hint: "",
            noCache: true,
            params: {
                // каждому полю --- соответствующая подсказка
                parts: ['NAME', 'PATRONUMIC']
            }
        });
};
// Для блока имени, фамилия вызов
var $surname = $("#shipping_address_lastname");
var $name = $("#shipping_address_firstname");

initName($surname, $name);

// Для блока email с проверкой есть ли данный инпут
var $email = $("#customer_email");
if ($email.length) {
    $email.suggestions({
        token: token,
        type: "EMAIL",
    });
}

 

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


  В 23.02.2021 в 18:42, pimur сказав:

у вас точно такие селекторы?

Expand  

Да, все стандартно!

Да и код https://opencartforum.com/files/tutorials/496-{%3F}/ работает, значит селекторы верные...

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


На сайте dadata написано, что "По умолчанию поиск по иностранным городам отключён. Чтобы включить его, укажите в запросе ограничение country = "*"". И пример: "locations": [ { "country": "Россия" }, { "country": "Казахстан" }, { "country": "Беларусь" } ]. Подскажите, куда вставит?

Сюда?:

 sgt.setOptions({
            constraints: {
                locations: locations
            },
            restrict_value: restrict_value
        });

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


  В 24.02.2021 в 09:36, garik сказав:
На сайте dadata написано, что "По умолчанию поиск по иностранным городам отключён. Чтобы включить его, укажите в запросе ограничение country = "*"". И пример: "locations": [ { "country": "Россия" }, { "country": "Казахстан" }, { "country": "Беларусь" } ]. Подскажите, куда вставит?
Сюда?:
 sgt.setOptions({
            constraints: {
                locations: locations
            },
            restrict_value: restrict_value
        });
sgt.setOptions({
locations = ваш приимер
            constraints: {
                locations: locations
            },
            restrict_value: restrict_value
        });
Но не понятно, как вы будете синхронизировать регионы и страны.
И на сколько я знаю, может ошибаюсь, по странам там подсказки только по городам. Соответственно надо составлять именно под вашу задачу.
По умолчанию пример из faq только для РФ.

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

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


  В 24.02.2021 в 12:39, Skiffjkee сказав:

Скинул!)

Expand  

Опечатку допустил в прошлом сообщении, с телефона писал

Верный

// Для блока имени, фамилия
function initName($surname, $name) {
    // Если инпута фамилия или имя нету, выходим
    if (!$surname.length || !$name.length) return;
    $surname.suggestions({
            token: token,
            type: "NAME",
            triggerSelectOnSpace: false,
            hint: "",
            noCache: true,
            params: {
                // каждому полю --- соответствующая подсказка
                parts: ['SURNAME']
            }
        });
  	$name.suggestions({
            token: token,
            type: "NAME",
            triggerSelectOnSpace: false,
            hint: "",
            noCache: true,
            params: {
                // каждому полю --- соответствующая подсказка
                parts: ['NAME', 'PATRONYMIC']
            }
        });
};
// Для блока имени, фамилия вызов
var $surname = $("#shipping_address_lastname");
var $name = $("#shipping_address_firstname");

initName($surname, $name);

Вам уже поправил. все работает.

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


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

 

// Ваш 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,
        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 = $('#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);

// Для блока имени, фамилия
function initName($surname, $name) {
    // Если инпута фамилия или имя нету, выходим
    if (!$surname.length || !$name.length) return;
    $surname.suggestions({
            token: token,
            type: "NAME",
            triggerSelectOnSpace: false,
            hint: "",
            noCache: true,
            params: {
                // каждому полю --- соответствующая подсказка
                parts: ['SURNAME']
            }
        });
  	$name.suggestions({
            token: token,
            type: "NAME",
            triggerSelectOnSpace: false,
            hint: "",
            noCache: true,
            params: {
                // каждому полю --- соответствующая подсказка
                parts: ['NAME', 'PATRONYMIC']
            }
        });
};
// Для блока имени, фамилия вызов
var $surname = $("#shipping_address_lastname");
var $name = $("#shipping_address_firstname");

initName($surname, $name);

// Для блока email с проверкой есть ли данный инпут
var $email = $("#customer_email");
if ($email.length) {
    $email.suggestions({
        token: token,
        type: "EMAIL",
    });
}

 

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


  В 24.02.2021 в 10:07, pimur сказав:

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

Expand  

Да, к сожалению только города. Вчера получил сообщение, что клиенты не могут зарегистрироваться, если выбрана любая другая страна кроме России. Например: Беларусь-Минская обл.- а потом, при выборе города, подсказки только для России. Может можно как-то сделать так, чтобы Подсказки работали только если выбрана Россия, а при выборе других стран отключались.

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


  В 25.02.2021 в 02:51, Skiffjkee сказав:

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

Expand  

 

  Показати вміст

 

А чего такой длинный, по сути я вот как сделал и все так же работает..

 

  Показати вміст

 

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


  В 25.02.2021 в 06:42, garik сказав:

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

Expand  

можно, чуть позже добавлю

 

  В 25.02.2021 в 09:28, SkaRzn2 сказав:

А чего такой длинный, по сути я вот как сделал и все так же работает..

Expand  

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

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

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


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

 

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

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

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

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


  В 26.02.2021 в 10:20, garik сказав:

Отлично, очень жду, а то пока пришлось модуль отключить. :-(

Expand  

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

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

 

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


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

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

 

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

  В 26.02.2021 в 03:16, Skiffjkee сказав:

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

 

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

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

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

Expand  

 

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

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


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

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

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

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

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

Вхід

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

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

Important Information

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