Яндекс.Метрика

    Реклама

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

    С месяц назад мы уже писали о сервисе контекстных подсказок 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!