Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


 Поделиться

Рекомендованные сообщения

 

 

И так по горячим следам. На примере

Цитата

При заполнении г. Севастополь

 

https://drive.google.com/file/d/1clp2FxR3Y0LlvnYVWHpmByIX6DCDED_t/view?usp=sharing

это не проблема модуля, а проблема старых данных в опенкарт, ровно у каждого магазина, пока он не столкнется, точно такие же данные =)

Вы можете воспользоваться например замечательным модулем от разработчика @AlexDW

 

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах


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

Да и все же верно не скрывать, а помочь заполнить их.

 

В текущем контексте, модуль умеет автозаполнять поля email, имя, фамилия, адресс, город, регион(теперь исключенны, не определение его, за исключением когда владелец магазина, переделал регионы РФ), индекс.

 

Можно создавать свой объект вызова на любую страницу, описание методов - дам чуть позже.

 

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

 

 

Ссылка на комментарий
Поделиться на других сайтах


Друзья обращайте внимание на https://drive.google.com/file/d/1r3NhidYvMBungN0pusH0Ebg3tj-pUq6Y/view?usp=sharing

Внизу под формой, расписал по route

{{ .... }} скодбки указывать {{ }} ненужно, это просто декорация

Ссылка на комментарий
Поделиться на других сайтах


В 03.07.2019 в 01:31, gree сказал:

Доброго дня

А планируется возможность загрузки данных ИНН для организаций и БИК банков?

На сколько я знаю dadata имеет такой функционал. А у нас юриков больше, чем физиков раза в 2, такой функционал был бы очень полезен.

Теперь это возможно.

Ссылка на комментарий
Поделиться на других сайтах


Если у вас стоит модуль доставки Shiptor, добавьте этот код в метод callback модуля dadata opencart

callback: [function(self, data) {
      let kladr_id_v = data(['kladr_id']);
  
      if(kladr_id_v) {
        kladr_id_v = kladr_id_v.slice(0,11);
        $.post("index.php?route=extension/shipping/shiptor/save", {
        	kladr_id: kladr_id_v
      	});
      }
    }, reloadAll],


Данный код тестировался на версии Opencart 2.3

Ссылка на комментарий
Поделиться на других сайтах


  • 2 недели спустя...

Поигрался с демо и заметил такую важную особенность, которая есть на сайте дадаты и нет на демо

когда набираю адрес на сайте дадаты - всплывают подсказки

при клике по одной из подсказок (например, в адресе всплыл только город и улица)) - этот адрес остается в поле полностью, а также курсор продолжает мигать. И с легкостью можно продолжать вбивать оставшиеся данные (дом, квартира).

 

 

 

Точно также проделываю на демо и получается так:

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

 

image.png.382834e2e1c18540bc16bff2ba56e356.png

 

Реально сделать, чтобы работало как на дадате?

 

Изменено пользователем Sergeyy84
Ссылка на комментарий
Поделиться на других сайтах


Поигрался с демо и заметил такую важную особенность, которая есть на сайте дадаты и нет на демо
когда набираю адрес на сайте дадаты - всплывают подсказки
при клике по одной из подсказок (например, в адресе всплыл только город и улица)) - этот адрес остается в поле полностью, а также курсор продолжает мигать. И с легкостью можно продолжать вбивать оставшиеся данные (дом, квартира).
 
spacer.png
 
 
Точно также проделываю на демо и получается так:
чтобы продолжить заполнять оставшиеся данные в адресе нужно кликнуть в поле адреса (на сайте дадаты этого не нужно делать, что очень удобно) и при этом всплывает иногда уже не тот адрес, который изначально набирал (предлагаются такие же улицы из других городов). в итоге приходится заново город набирать.
 
spacer.png
 
Реально сделать, чтобы работало как на дадате?
 
Здравствуйте. В поле ввода просто нужно выставить для метода reload свои значения, как собрать после перезагрузки поле ввода.

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

Отправлено с моего ZB631KL через Tapatalk

Ссылка на комментарий
Поделиться на других сайтах


Ещё неделя акций не планируется случайно?))
Быть может, когда то позже.

Отправлено с моего ZB631KL через Tapatalk

Ссылка на комментарий
Поделиться на других сайтах


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

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

Можете на демке это сделать, если не сложно?

Ссылка на комментарий
Поделиться на других сайтах


Хорошо позже. Там надо ещё обновить версию, на демо немного старее.

Отправлено с моего ZB631KL через Tapatalk

Ссылка на комментарий
Поделиться на других сайтах


50 минут назад, Sergeyy84 сказал:

(на сайте дадаты этого не нужно делать, что очень удобно)

 

https://dadata.ru/suggestions/#address

Вот щас проверил. Там ровно так же как и у меня

Пока не выбрал из выпадающего списка нижние поля не заполнены.

Ссылка на комментарий
Поделиться на других сайтах


Добрый день.

В чем отличие от бесплатного модуля на форуме?

В 04.08.2019 в 04:35, pimur сказал:

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

На мой взгляд одно поле и сноска с "выставлено" это и была Ваша фишка! Я сам себе написал для симплы, но визуально мне Ваше решение больше понравилось и я бы его купил.
Без скрытия импутов теряется смысл основного функционала - корректность адреса. Наши дорогие покупатели все равно будут писать адрес по строкам и игнорировать основное поле с подсказкой. Я это проходил. А у Вас на демке подсказки и взаимосвязь между полями адреса не настроена. Можно индекс, город и улицу совершенно левые написать. Особенно проблема с верным адресом остра для людей проживающих за МКАД и КАД. К примеру, когда улицу нужно указывать внутри поселения: Кудрово, Шушары, Девяткино, а они упорно пишут Санкт-Петербург и по итогу доставка не считается. 

Сейчас у меня выглядит так:

 

Спойлер

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

PS. И я согласен с предыдущим комментом, что перезагружающиеся поля в симпле нервируют. Выбрал город - релоад, улицу - релоад. Мое мнение, что нужно вешать на кнопку "Рассчитать доставку". Сможете сделать?

Изменено пользователем Twix87
Ссылка на комментарий
Поделиться на других сайтах


9 часов назад, Sergeyy84 сказал:

и при этом всплывает иногда уже не тот адрес, который изначально набирал (предлагаются такие же улицы из других городов). в итоге приходится заново город набирать.

+

Спойлер

 

Ссылка на комментарий
Поделиться на других сайтах


35 минут назад, Twix87 сказал:

Без скрытия импутов теряется смысл

В чем проблема? Модуль позволяет скрывать, но уже пользовательской функцией в callback. Я просто ещё не успев написать инструкцию, но если

 

38 минут назад, Twix87 сказал:

Я сам себе написал для симплы,

Не составит труда взглянуть на исходник, кто покупает получает не сжатый js, где все понятно для тех кто понимает javascript. Обычные пользователи, просто берут с доп настройкой. У меня есть примеры и скрытием вообще всего, оставив и подменив только email, telefon, address. Я просто не стал делать полным скрытием, так как не хочу брать на себя ответственность за вдруг пользователь настроил как то не так, потом начнётся.... Отсюда и все вытекающие. Тем кому надо я уже давно реализовал полное скрытие, благо модуль позволяет расширять javascript объект callback функциями.

 

А так, даже если что то и происходит, модуль выбрасывает ошибку а консоль, и все дальше работает прекрасно)

Ссылка на комментарий
Поделиться на других сайтах


34 минуты назад, Twix87 сказал:

+

  Показать контент

 

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

Хорошо позже. Там надо ещё обновить версию, на демо немного старее.

 

Ссылка на комментарий
Поделиться на других сайтах


49 минут назад, Twix87 сказал:

Выбрал город - релоад, улицу - релоад. Мое мнение, что нужно вешать на кнопку "Рассчитать доставку

Вот в демо, в админке посмотрите там есть внизу reloadall.

 

Что это значит, что я просто имитирую стандартное поведение симплы, для чего и почему там так хотя и отключается. А все просто, потому что модуль симпла при релоад, сохраняет данные а сессию и блягодаря этому может создавать сразу заказ хоть он и не подтверждён, да и тем самым даёт возможность восстановить корзину если пользователь не чайно перезагрузил.

И как быть? Можно сделать как и вы говорите, вообще в объект внелрен сохранения в localstorage просто в методе reload надо передать не массив, а строку с таким содержимым 'address' тогда будет сохранение и восстановление не с инпутов, а с localstorage.

 

Ps пишу с телефона по памяти.

Ссылка на комментарий
Поделиться на других сайтах


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

 

Если не хочется заморачиваться, можете написать краткое ТЗ, купить модуль и могу под ваши хотелки сделать за ₽

Ссылка на комментарий
Поделиться на других сайтах


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

Отправлено с моего ZB631KL через Tapatalk

Ссылка на комментарий
Поделиться на других сайтах


  • 4 недели спустя...

кому нужен вот такой вариант 

udIBrwd.png

Пример конфига объекта:

Спойлер
const ChangeState = {
    country: true,
    email: '#customer_email',
    name: '#customer_firstname',
    city: '#shipping_address_city',
    address: '#shipping_address_address_1',
    make_keys: {
      	email: {
            email: 'value'
        },
        fio: {
            name: ['surname', 'name', 'patronymic'],
        },
        address: {
            city: ['city', 'settlement_with_type', 'area_with_type'],
            address: ['city_district_with_type', 'street_with_type', ['house_type', 'house'], ['block_type', 'block'], ['flat_type', 'flat']],
        }
    },
    input: {
       email: ['div', {className: 'custom_email'}, ' \
            <input type="email" id="js_suggest_email" class="form-control" placeholder="Работает автозаполнение Email"> \
            <div class="js_suggest" hidden> \
                <ul></ul> \
                <button type="button" class="btn btn-light">✕</button> \
                <div class="small">Выберите вариант или продолжите ввод</div> \
            </div> \
        '],
        fio: ['div', {className: 'custom_fio'}, ' \
            <input type="text" id="js_suggest_fio" class="form-control" placeholder="Работает автозаполнение Ф.И.О"> \
            <div class="js_suggest" hidden> \
                <ul></ul> \
                <button type="button" class="btn btn-light">✕</button> \
                <div class="small">Выберите вариант или продолжите ввод</div> \
            </div> \
        '],
        address: ['div', {className: 'form-group jumbotron main_jumbotron'}, ' \
            <div id="js_address_out"></div><button type="button" class="btn btn-default btn-sm" onclick="document.querySelector(\'#simplecheckout_shipping_address\').hidden = false;">Ручное редактирование адреса</button>\
            <label for="js_suggest_address" class="control-label h4">Адрес - Автозаполнение:</label> \
            <textarea id="js_suggest_address" class="form-control" placeholder="Впишите полный адрес и выберите из выпадающего списка" rows="3"></textarea> \
            <div class="js_suggest" hidden> \
                <ul></ul> \
                <button type="button" class="btn btn-light"><i class="fa fa-times" aria-hidden="true"></i></button> \
                <div class="small">Выберите вариант или продолжите ввод</div> \
            </div> \
        '],
    },
    callback: [reloadAll],
    insert: {
        before: [
          	['#customer_email', 'email', true],
            ['#customer_firstname', 'fio', true],
            ['#simplecheckout_shipping_address', 'address', true]
        ]
    },
   reload: {
     	email: ['email'],
     	fio: ['name'],
        address: ['city', 'address'],
      	callback: function(self) {
          var someMore = document.querySelector('#js_address_out');
          
          if(!self.city.value) {
            someMore.innerHTML = '<span><i class="fa fa-exclamation-triangle" aria-hidden="true"></i> укажите город</span>';
          } else if(!self.address.value) {
            someMore.innerHTML = '<span><i class="fa fa-exclamation-triangle" aria-hidden="true"></i> укажите улицу и дом</span>';
          } else {
            
            var word = [];
            ['<b>город:</b> ' + self.city.value + '</b>', 
             '<b>улица:</b> ' + self.address.value].forEach(function(val) {
              word.push(val);
            });
            
            someMore.innerHTML = word.join(', ');
          }
        }
    },
};

 

 

 

и в стилях 

Спойлер
.main_jumbotron {
    display: flex;
    flex-direction: column;
}

#js_address_out {
    order: 1;
    padding-top: 5px;
}

#js_address_out span {
    color: red;
}

#js_address_out b {
    font-weight: 600;
}

#js_address_out b:not(:first-child),
#js_address_out span:not(:first-child) {
    padding-left: 5px;
}

.main_jumbotron>.btn {
    order: 2;
    margin-top: 10px;
}

.form-group[hidden],
.form-control[hidden] {
    display: none!important;
}

 

 

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.