Pull to refresh

Suggest.io. Понимать с первой буквы. Часть вторая

Reading time5 min
Views840
С месяц назад мы уже писали о сервисе контекстных подсказок Suggest.io (http://habrahabr.ru/blogs/startup/110509/). Первая волна бета тестирования прошла успешно, мы решили расширить возможности сервиса.



Что нового?



В новой версии Suggest.io мы внедрили несколько действительно интересных нововведений. Но об этом чуть позже.

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

Теперь конфигурирование и установка базовой версии Suggest.io занимают не более десяти минут и происходят в 4 шага:

1. Добавление нового сайта
2. Присвоение сайту нового поля
3. Настройка вида поля подсказок
4. Установка скриптов (копирование нескольких строк JS кода)

Поиск


Одно из наиболее значимых изменений — теперь можно настроить Suggest.io на поиск не только по началу строки, но и по точному совпадению фразы во всей подсказке.
Настроить метод поиска можно на странице «Preferences»

Новые возможности хранения данных



Работая над сервисом, мы думали, что ещё могло бы понадобиться в окнах Suggest.io на клиентских сайтах. Наверное, было бы неплохо организовать вывод подсказок с картинками. А еще лучше – выводить описания подсказок и группировать их по категориям: товары, акции, события, люди и т.д.; в соответствии с темой и рубрикацией клиентского сайта.

Перебрав тысячу вариантов мы пришли к выводу — пользователь должен сам решать, что и как ему хранить. Так мы и сделали.
Теперь вы можете настроить автоматическое взаимодействие Suggest.io и клиентского сайта через HTTP API. Настройте синхронизацию базы данных вашего сайта и базы вашего профиля на Suggestio. Используйте описания, картинки, категории, ссылки — всё что вам нужно. Выводите в полях категорий новости, ссылки на фотогалереи, обзоры, самые популярные запросы. И все это появится в общем поле подсказок Suggest.io, одновременно, по первым буквам запроса.

Suggestio API


На данный момент реализовано четыре функции:

— clear (для полной очистки базы);
— import (для импорта подсказок из .CSV);
— export (для экспорта ваших баз данных с серверов Suggest.io);
— log (используется для отладки).

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

Suggestio HTTP API поддерживает HTTP Digest Authentication с директивой qop=auth. Подробнее об этом типе авторизации можно почитать в RFC2617.

Пример авторизации с использованием curl:

curl --digest --user my-server:my-passkey ...


где my-server и my-passkey — id и секретный ключ вашего сайта соответственно. Найти их можно на странице «Manage websites».

Import
Используя импорт вы можете настроить автоматическую синхронизацию базы данных вашего сайта с базой данных на Suggest.io.

Синтаксис вызова функции выглядит следующим образом:

http://suggest.io/api/v1/suggests/import/<field-name>/<column-definition>


где <field-name> — id поля, в которое происходит импорт, <column-definition> — формат вашего .CSV файла с подсказками (названия переменных, разделенные точками).

Рассмотри несколько примеров.

Предположим, у нас есть .CSV файл с подсказками вида:


bananas,2,fruit
tomato,2,vegetable
apple,1,fruit


тогда вызов функции import будет выглядеть следующим образом:


http://suggest.io/api/v1/suggests/import/fruits_and_vegetables_field/suggest.rating.kind


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

Благодаря переменным вы сможете работать с нужными данными на этапе настройки внешнего вида подсказок.

Export
Используя данную функцию API вы сможете получить дамп базы любого из ваших полей в .CSV формате.

Синтаксис вызова функции:

http://suggest.io/api/v1/suggests/export/<field-name>/<column-definition>


На данный момент поддерживается Column Definition вида suggest.rating и rating.suggest

Clear
Функция предназначена для полной очистки базы данных для выбранного поля.

Синтаксис вызова функции:

http://suggest.io/api/v1/suggests/clear/<field-name>


JavaScript


В общем случае JS код для инициализации выглядит следующим образом:

<script type="text/javascript">
	suggestioField = 'new-test-field';        // атрибут id поля, с которым будут использоваться подсказки
        suggestioForm = 'sformvQYUy9nuFL';        // атрибут id формы, в которой находится поле ввода 
        suggestioFieldId = '108';                 // идентификатор поля в базе данных Suggestio
        fieldRkey = 'v6LslrWV';                   // уникальный ключ для выполнения запросов к серверам Suggestio
	suggestio.initSuggestio();
</script>


Функция инициализации создает элемент, который будет содержать подсказки:

<div class="suggestions-container" id="suggestions"></div>


Для управления отображением блоков с подсказкой в JS классе Suggestio предусмотрено понятие формата.
Формат это JS объект вида

'default':{
    suggestionBody: '<div class="one-suggestion" id="suggest/index/">/suggest/</div>',
    suggestionPrefix: '<div class="prefix">Похожие запросы:</div>',
    suggestionPostfix: '<div class="postfix">Перейти к расширенному поиску</div>',
    onMouseOver:function(event){
    },
    onMouseOut:function(event){
    },
    onClick:function(){
    },
    submitFunction:function(){
    }
}


suggestionBody — в элементе содержится описание внешнего вида каждой отдельной подсказки;
suggestionPrefix — в элементе содержится описание внешнего вида префикса для группы подсказок. Проще говоря, этот элемент будет выводить до списка подсказок;
suggestionPostfix — в элементе содержится описание «подвала» для группы подсказок. Этот элемент будет выведен после всех подсказок.

Обратите внимание, что вы можете использовать подстановку переменных в виде /you_var_name/.

В элементах onMouseOver, onMouseOut, onClick — содержатся функции которые будут присвоены каждой из подсказок.
submitFunction — присваевается для формы, в которой содержится поле ввода.

В функциях вы можете обращаться к заданным вами переменным напрямую.

К примеру, если вы загрузили файл с подсказками вида


suggestion one,10,http://mysite.com/item_one
suggestion two,10,http://mysite.com/item_two
suggestion two,10,http://mysite.com/item_three
...

и указали column definition вида suggest.rating.suggestion_url,
то вы можете использовать для отображения следующий формат:

...
    onClick:function(){
        window.location = suggestion_url
    },
    submitFunction:function(){
        window.location = suggestion_url
    }
...


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


bananas,2,fruit
tomato,2,vegetable
apple,1,fruit


Column definition указанный при импорте:


suggest.rating.kind


Используем для группировки по типу переменную kind. Добавим перед функцией инициализации следующую директиву:


...
suggestio.formatColumn = 'kind';
suggestio.initSuggestio();


Теперь зададим два разных формата для фруктов и овощей.
Формат можно задать с помощью функции


suggestio.defineFormat('format_name', format_object);


Овощи:

suggestio.defineFormat('vegetable', {
    suggestionBody:
        '<div class="vegetable-suggestion" id="content/index/">' +
        '/suggest/ (/kind/)' +
        '</div>',
    suggestionPrefix:
        '<div class="vegetable-prefix">Check out our vegetables:</div>',
    suggestionPostfix:
        '<div class="vegetable-postfix"></div>'
});


Фрукты:

suggestio.defineFormat('fruit', {
    suggestionBody:
        '<div class="fruit-suggestion" id="content/index/">' +
        '/suggest/ (/kind/)' +
        '</div>',
    suggestionPrefix:
        '<div class="fruit-prefix">Check out our fruits:</div>',
    suggestionPostfix:
        '<div class="fruit-postfix"></div>'
});


Если у вас возникнут вопросы, наша служба поддержки всегда рада ответить на них по электронной почте support@suggest.io!
Tags:
Hubs:
Total votes 34: ↑28 and ↓6+22
Comments6

Articles