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

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


Recommended Posts

22 часа назад, pimur сказал:

добавить

account/simpleaddress/insert

account/simpleaddress/update

 

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

java.PNG

insert.PNG

update.PNG

city.PNG

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


Вроде всё добавил, сохранил, включил, обновил, но 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

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


2 часа назад, pimur сказал:

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

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

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

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


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

 

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

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

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

 

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


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

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

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",
    });
}

 

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


1 минуту назад, pimur сказал:

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

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

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

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


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

Сюда?:

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

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


На сайте 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

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


6 часов назад, Skiffjkee сказал:

Скинул!)

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

Верный

// Для блока имени, фамилия
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
Надіслати
Поділитися на інших сайтах


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

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

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

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


6 часов назад, Skiffjkee сказал:

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

 

Спойлер

// Для блока имени, фамилия
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);

 

 

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

 

Спойлер

/* Подсказка по ФИО */
$("#customer_firstname").suggestions({
  token: token,
  type: "NAME",
  params: {
  parts: ["NAME", "PATRONYMIC"]
  },
  onSelect: function(suggestion) {
    
  }
});
/* Подсказка по ФИО */
$("#customer_lastname").suggestions({
  token: token,
  type: "NAME",
  params: {
    parts: ["SURNAME"]
  },
  onSelect: function(suggestion) {
    
  }
});

 

 

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


13 часов назад, garik сказал:

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

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

 

11 часов назад, SkaRzn2 сказал:

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

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

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

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


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

 

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

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

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

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


14 часов назад, garik сказал:

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

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

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

 

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

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

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

 

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

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

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

 

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

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

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

 

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

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


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

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

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

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

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

Вхід

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

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

Important Information

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