Перейти к содержимому


Подключение подсказок сервиса dadata

dadata подсказки ввод адреса

Сообщений в теме: 39

#1 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 19 Декабрь 2016 - 00:39

DaData.ru — сервис автоматической проверки и исправления контактных данных (ФИО, адресов, телефонов, email). Возможности постоянно расширяются. Есть платные и бесплатные услуги. О последних и пойдет речь. Как это работает можно посмотреть по ссылке.
Зарегистрируйтесь, чтобы получить персональный ключ, иначе ничего работать не будет.
Приведенный ниже пример - подсказка для адресных полей Прикрепленный файл  2016-12-20_152640.jpg   126К   60 Количество загрузок:
Для работы сервиса нужно подключить несколько файлов к КБ - один файл стилей и пару javascript-файлов. В первый пришлось внести коррекцию (прилагается Прикрепленный файл  suggestions.css   9,73К   22 Количество загрузок:).
Как подключать описано здесь. Прочтите, чтобы не задавать одни и те же вопросы.
Скачайте прилагаемый к теме css-файл. В папке cb_modules создайте еще одну папку, например dadata и положите его в нее. В файл my_script.js добавьте код:
$(function($) {

// ================================================
//				 ПОДСКАЗКИ ДЛЯ ПОЛЕЙ
// ================================================
$("[placeholder^='Введите адрес']").suggestions({
serviceUrl: "https://suggestions.dadata.ru/suggestions/api/4_1/rs",
token: "----- впишите сюда свой персональный ключ, полученный при регистрации на сервисе dadata.ru -----",
type: "ADDRESS",
count: 5,
/* Вызывается, когда пользователь выбирает одну из подсказок */
onSelect: function(suggestion) {
  console.log(suggestion);
  if (typeof setSugValue == 'function') {
   setSugValue(suggestion.data);
  }
}
});
});
Вставьте в functions_custom.php еще несколько строк:
$ADDITIONAL_JAVASCRIPT_INCLUDE .= "<script type='text/javascript' src='https://cdn.jsdelivr.net/jquery.suggestions/16.8/js/jquery.suggestions.min.js'></script>";
$ADDITIONAL_JAVASCRIPT_INCLUDE .= "<link rel='stylesheet' href='cb_modules/dadata/suggestions.css' type='text/css' >";
Последний штрих. Что нужно сделать, чтобы все это заработало.
Откройте настройки текстового поля, в которое Вы планируете вводить адрес. Нажмите Дополнительно. В опцию Подсказка по полю впишите фразу: Введите адрес. Этот текст становится ключевым для определения, что данное текстовое поле теперь используется для ввода адреса. Можете придумать свою фразу, не забудьте изменить ее в строке кода выше
 $("[placeholder^='Введите адрес']")
Сохраните настройки. Все.

Что еще можно добавить.
Сервис, помимо подсказок адреса, возвращает еще массу переменных, которые не видны явно, но можно использовать. В частности: получить координаты объекта, которые можно передать по ссылке в яндекс-карты и открыть его расположение на ней; индекс для отправки корреспонденции и т.д. Для этого выполните следующее. В любое поле записи, в настройках добавьте в поле для javascript вычислений функцию:
// Заполнение полей сервисом DADATA
function setSugValue(daData)
{
  document.getElementById("valueXXXX").value = daData.geo_lat; // широта
  document.getElementById("valueYYYY").value = daData.geo_lon; // долгота
  document.getElementById("valueZZZZ").value = daData.postal_code; // индекс
}
где XXXX, YYYY и ZZZZ - внутренние номера полей в КБ. Посмотреть их можно перейдя в настройки таблицы в режиме Разработчика - имя поля без буквы f. Один нюанс: поле в которое Вы желаете внести значение должно быть доступно для заполнения, т.е. в настройках доступа должна стоять галочка для режимов Редактирование и Добавление. Иначе выдаст ошибку. Если хотите скрыть поля используйте функцию
display_field(XXXX, 0);
Теперь, после того, как будет выбрано значение из предлагаемого сервисом выпадающего списка, отработает событие onSelect и будет вызвана функция setSugData. То, что Вы в ней пропишите зависит исключительно от Вашего воображения. Выше показан простой пример.

P.S.
По аналогии можно использовать сервис dadata для разбивки и склонения ФИО, что удобно для формирования документов, поскольку там часто используется родительный падеж, а также фамилия с инициалами.
Есть возможность легко заполнять реквизиты компаний, например по ИНН и БИК.
Пример показывает принцип, остальное есть в описании сервиса.

Сообщение отредактировал andibrag: 09 Апрель 2017 - 18:23

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#2 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 25 Декабрь 2016 - 16:43

Что-то не работает. У меня SAAS версия и я все файлы в корне разместил, исправив ссылки. Но при вводе ничего не происходит. Во внешнем скрипте делал - все работало. Тут явно что-то из CSS глушится. Не поможете?

#3 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 26 Декабрь 2016 - 09:41

Просмотр сообщенияАлександр Пономарев (25 Декабрь 2016 - 16:43) писал:

Что-то не работает. У меня SAAS версия и я все файлы в корне разместил, исправив ссылки. Но при вводе ничего не происходит. Во внешнем скрипте делал - все работало. Тут явно что-то из CSS глушится. Не поможете?
Через панель проверяли наличие ajax запроса? Возвращает что-нибудь?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#4 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 28 Декабрь 2016 - 23:54

В my_script.js пишет Uncaught SyntaxError: Unexpected end of input
Меня несколько смущает конструкция

$(function($) {
Явно лишняя она тут

Хотя токен валидный,
Консоль пишет: Uncaught SyntaxError: Unexpected token }

Сообщение отредактировал Александр Пономарев: 29 Декабрь 2016 - 00:36


#5 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 29 Декабрь 2016 - 00:38

Поправил лишний function. Теперь пишет
Uncaught TypeError: Object [object Object] has no method 'suggestions' my_script.js:4(anonymous function)

Сообщение отредактировал Александр Пономарев: 29 Декабрь 2016 - 00:40


#6 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 29 Декабрь 2016 - 12:51

Просмотр сообщенияАлександр Пономарев (29 Декабрь 2016 - 00:38) писал:

Поправил лишний function. Теперь пишет
Uncaught TypeError: Object [object Object] has no method 'suggestions' my_script.js:4(anonymous function)
Привожу Ваш пример содержимого файла my_script.js
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<!--[if lt IE 10]>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.1/jquery.xdomainrequest.min.js"></script>
<![endif]-->
<script type="text/javascript" src="https://cdn.jsdelivr.net/jquery.suggestions/16.6/js/jquery.suggestions.min.js"></script>
<script type="text/javascript">
	$("[placeholder^='Введите адрес']").suggestions({
		serviceUrl: "https://suggestions.dadata.ru/suggestions/api/4_1/rs",
		token: "38dca316e27de7c400639d70489d576a5eb1dc4a",
		type: "ADDRESS",
		/* Вызывается, когда пользователь выбирает одну из подсказок */
		onSelect: function(suggestion) {
			console.log(suggestion);
		}
	});
</script>
Зачем Вы внутри js файла подключаете сторонние яваскрипты?
Внутри должно лежать только то, что у меня указано и без обрамляющих тегов
<script> ... </script>
Подключение JS файлов делайте через переменную $ADDITIONAL_JAVASCRIPT_INCLUDE. Специально дал ссылку в тексте на пост, где все рассказано.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#7 posatm

    Новичок

  • Пользователи
  • Pip
  • 8 сообщений

Отправлено 29 Январь 2017 - 22:09

Добрый час!
Сделал все по инструкции, но чтото не заработало. У нас Saas-версия.
1) создал файл dadata.js и добавил туда код из примера выше со своим токеном, скачал suggestions.css
2) положил их в functions_custom.php
<?php
$ADDITIONAL_JAVASCRIPT_INCLUDE.="<script type='text/javascript' src='https://cdn.jsdelivr.net/jquery.suggestions/16.8/js/jquery.suggestions.min.js'></script>";
$ADDITIONAL_JAVASCRIPT_INCLUDE.="<link rel='stylesheet' href='modules/dadata/suggestions.css' type='text/css' >";
$ADDITIONAL_JAVASCRIPT_INCLUDE.="<script type='text/javascript' src='modules/dadata/dadata.js'></script>";
?<
4) прописал путь до css
5) добавил фразу: Введите адрес в настройках поля

не работает. подсказка не появляется
При этом создал представление, подключенное к dadata, вставил в него предлагаем на сайте html код - все работает и подсказки появляются.
В самом поле js нужно добавлять?

#8 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 30 Январь 2017 - 11:04

Просмотр сообщенияposatm (29 Январь 2017 - 22:09) писал:

...
не работает. подсказка не появляется
В прописанном коде перевернутый тег в конце - это описка?
Еще один момент. Он связан с настройками самого сервера и относится к путям файлов: абсолютным и относительным. Поэтому всегда проверяйте подключен ли файл или нет, возможно по указанному пути ничего не находит.

Сообщение отредактировал andibrag: 30 Январь 2017 - 11:19

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#9 posatm

    Новичок

  • Пользователи
  • Pip
  • 8 сообщений

Отправлено 30 Январь 2017 - 14:31

Просмотр сообщенияandibrag (30 Январь 2017 - 11:04) писал:

В прописанном коде перевернутый тег в конце - это описка?
Еще один момент. Он связан с настройками самого сервера и относится к путям файлов: абсолютным и относительным. Поэтому всегда проверяйте подключен ли файл или нет, возможно по указанному пути ничего не находит.

Да описка. В файле все корректно ?>
Пути проверил - файлы доступны

#10 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 30 Январь 2017 - 19:25

Просмотр сообщенияposatm (30 Январь 2017 - 14:31) писал:

Да описка. В файле все корректно ?>
Пути проверил - файлы доступны
Какой браузер? Ошибки есть какие-нибудь в панели отладки?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#11 Аlex Jet

    Активный участник

  • Пользователи
  • PipPipPip
  • 38 сообщений
  • Пол:Мужчина
  • Город:Уфа

Отправлено 08 Апрель 2017 - 00:40

Сделал тоже самое, подсказки не появляются, браузер - хром

Файл include/functions_custom.php:
<?php
$ADDITIONAL_JAVASCRIPT_INCLUDE.="<script type='text/javascript' src='https://cdn.jsdelivr.net/jquery.suggestions/16.8/js/jquery.suggestions.min.js'></script>";
$ADDITIONAL_JAVASCRIPT_INCLUDE.="<link rel='stylesheet' href='dadata/suggestions.css' type='text/css' >";
$ADDITIONAL_JAVASCRIPT_INCLUDE.="<script type='text/javascript' src='dadata/dadata.js'></script>";
?>

Файл dadata/dadata.js:
$(function($) {
// ПОДСКАЗКИ ДЛЯ ПОЛЕЙ
$("[placeholder^='Введите адрес']").suggestions({
serviceUrl: "https://suggestions.dadata.ru/suggestions/api/4_1/rs",
token: "API-ключ",
type: "ADDRESS",
count: 5,
/* Вызывается, когда пользователь выбирает одну из подсказок */
onSelect: function(suggestion) {
  console.log(suggestion);
  if (typeof setSugValue == 'function') {
   setSugValue(suggestion.data);
  }
}
});

Тип поля для ввода - текст, подсказка стоит, права на добавление и редактирование тоже. Скрипты и файл стилей подгружаются.
Прикрепленный файл  загрузка скриптов dadata.png   135,93К   21 Количество загрузок:
Белый сервис - сервисный центр, работающий на одной из лучших CRM.

#12 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 08 Апрель 2017 - 19:07

Просмотр сообщенияАlex Jet (08 Апрель 2017 - 00:40) писал:

Скрипты и файл стилей подгружаются.
Похоже в путях дело.
Наведите мышкой на прописанный в тегах путь в панели отладки. Прикрепленный файл  2017-04-08_185604.png   27,41К   10 Количество загрузок:
Должна появится подсказка с полным адресом файла. Убедитесь, что реальное его расположение совпадает с тем, что высветилось.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#13 Аlex Jet

    Активный участник

  • Пользователи
  • PipPipPip
  • 38 сообщений
  • Пол:Мужчина
  • Город:Уфа

Отправлено 09 Апрель 2017 - 12:59

Просмотр сообщенияandibrag (08 Апрель 2017 - 19:07) писал:

Убедитесь, что реальное его расположение совпадает с тем, что высветилось.

Все пути совпадают, на скриншоте видно. Настройки личного кабинета dadata тоже на скриншоте.
Прикрепленный файл  скрипты дадата.jpg   189,18К   9 Количество загрузок: Прикрепленный файл  дадата настройки.jpg   70,14К   11 Количество загрузок:
Белый сервис - сервисный центр, работающий на одной из лучших CRM.

#14 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 09 Апрель 2017 - 17:37

Просмотр сообщенияАlex Jet (09 Апрель 2017 - 12:59) писал:

Все пути совпадают, на скриншоте видно. Настройки личного кабинета dadata тоже на скриншоте.
Т.е. у Вас папка dadata лежит в корне...
Ajax запрос что-нибудь возвращает?Прикрепленный файл  2017-04-09_173409.png   127,58К   12 Количество загрузок:

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#15 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 09 Апрель 2017 - 17:58

Не стоит какой-нибудь блокировщик рекламы, вроде adguard? Или антивирус может блокировать. У меня происходила вечная борьба, пока не установил сайт в исключения.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#16 Аlex Jet

    Активный участник

  • Пользователи
  • PipPipPip
  • 38 сообщений
  • Пол:Мужчина
  • Город:Уфа

Отправлено 09 Апрель 2017 - 18:11

Цитата

Ajax запрос что-нибудь возвращает?
Тут выходит ошибка Uncaught SyntaxError: Unexpected end of input..

Блокировщики и прочее не стоит, все лишнее отключено

Сообщение отредактировал Аlex Jet: 09 Апрель 2017 - 18:12

Белый сервис - сервисный центр, работающий на одной из лучших CRM.

#17 Аlex Jet

    Активный участник

  • Пользователи
  • PipPipPip
  • 38 сообщений
  • Пол:Мужчина
  • Город:Уфа

Отправлено 09 Апрель 2017 - 18:17

Вот скриншоты с ошибкой:
https://yadi.sk/i/20BE1NVv3Go5tZ
https://yadi.sk/i/PKHr8StL3Go5tL
Белый сервис - сервисный центр, работающий на одной из лучших CRM.

#18 Аlex Jet

    Активный участник

  • Пользователи
  • PipPipPip
  • 38 сообщений
  • Пол:Мужчина
  • Город:Уфа

Отправлено 09 Апрель 2017 - 18:23

По-моему в конце кода не хватает скобок
$(function($) {
// ПОДСКАЗКИ ДЛЯ ПОЛЕЙ
$("[placeholder^='Введите адрес']").suggestions({
serviceUrl: "https://suggestions.dadata.ru/suggestions/api/4_1/rs",
token: "API-ключ",
type: "ADDRESS",
count: 5,
/* Вызывается, когда пользователь выбирает одну из подсказок */
onSelect: function(suggestion) {
  console.log(suggestion);
  if (typeof setSugValue == 'function') {
   setSugValue(suggestion.data);
  }
}
});
}); //добавил эти скобки

Белый сервис - сервисный центр, работающий на одной из лучших CRM.

#19 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 09 Апрель 2017 - 18:24

Просмотр сообщенияАlex Jet (09 Апрель 2017 - 18:11) писал:

Тут выходит ошибка Uncaught SyntaxError: Unexpected end of input..
Блокировщики и прочее не стоит, все лишнее отключено
Проверил код. Мой косяк. Пропустил еще одни закрывающие. Добавьте
});
в конце.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#20 Аlex Jet

    Активный участник

  • Пользователи
  • PipPipPip
  • 38 сообщений
  • Пол:Мужчина
  • Город:Уфа

Отправлено 09 Апрель 2017 - 18:26

Заработало =) andibrag, большое спасибо за участие)
Белый сервис - сервисный центр, работающий на одной из лучших CRM.





Количество пользователей, читающих эту тему: 8

0 пользователей, 8 гостей, 0 анонимных