[mSearch2] Релиз кандидат 1.0.0: Автодополнение и словари

Ну вот и готова предрелизная версия mSearch2. Мы должны ее дружно потетстировать, поправить баги и получится стабильная версия.

В принципе, теперь я воплотил все свои (и не только свои) хотелки. У нас добавилось управление словарями прямо в вдминке и автодополнение.

Со словарями всё просто — при установке дополнения сразу загружаются 2 словаря: русский и английский. Если вам нужно добавить или удалить словарь, для этого появился новый раздел в админке.
В индексации участвуют все установленные словари, ничего настраивать не нужно. При загрузке словаря вы можете выбрать зеркало SourceForge, чтобы качать с ближайшего к вам сервера.

Словарей у phpMorphy всего 5, так что я добавил все.

Автодополнение

Эту штуку просят сделать уже давно, но так как она весьма непростая, реализация затянулась. Фокус в том, что автозаполнение на готовом сайте «для себя» сделать нетрудно, а вот написать универсально, чтобы вы могли показывать и категории, и запросы, и товары с картинками — это заморочка.

Но все вопросы решены и теперь у нас есть новый сниппет mSearchForm. Вот его параметры:
  • &pageId — id страницы, на которую будет отправлен юзер в месте с запросом. Если не указано — это будет текущая страница.
  • &tplForm —  чанк с фомой для вывода. У тега form обязательно должен быть указан класс msearch2.
  • &tpl — Оформление строчек автодополнения.
  • &autocomplete — Настройка автоподсказок. Доступно 3 варианта: results (по умолчанию, поиск по сайту), queries (поиск по запросам) и 0 — отключить.
  • &limit — Ограничение выборки строк автодополнения.
  • &element — Какой сниппет оформляет результаты. Это актуально только для режима results.
Итак, у нас есть 2 варианта работы autocomplete: поиск по сайту и поиск по запросам.

Первый самый интересный — он ищет точно так же как и сниппет mSearch2, получает id совпадений и передаёт их в указанный сниппет. А сниппет может быть любым, главное, чтобы он понимал параметр &resources.

Заодно сниппету будут переданы все параметры, указанные при вызове mSearchForm — очень похоже на работу mFilter2 с пагинатором.

Таким образом, вы можете указать чанки, подключение ТВ, таблиц, картинок товаров и чего угодно. Так как этот режим сразу выводит точное совпадение, при выборе результата вы отправитесь на конечную страницу — вам нечего искать, вы уже нашли.

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

А второй режим попроще — он просто смотрит таблицу запросов, которая появилась в прошлой версии, и выводит совпадения из неё. Выводит, понятно, только те, что с результатами. Потому, что от дополнения «ккккувпусм» толку никакого не будет (вы бы видели, что у меня на сайте ищут).

Само дополнение работает на jQueryUI.autocomplete, все нужные стили и скрипты подключаются автоматически, в том случае, если они нужны. Если же у вас уже подключен свой jQueryUI — будет использована ваша версия.

Заключение

Попробовать autocomplete можно у меня на сайте. В боковой панеле режим results, а на странице поиска — queries. Еще можно поглядеть на сайте документации.


Новую версию mSearch2 уже можно качать из репозитория. Если вы его еще не купили — появился очередной повод прикупить.

В ближайшее время планирую собраться и написать-таки полную документацию по всему mSearch2, включая последние обновления.

Следующая заметка
[Tickets] 1.3.0-beta Сниппет TicketMeta и рейтинги
Предыдущая заметка
[PageBreaker] Разбивка длинных текстов


Комментарии ()

  1. Виталий Валерьевич 23 января 2014, 18:15 # 0
    Уместное дополнение, правда поиск в автодополнении мне показалось не слишком шустрый.
    Ожидание 2-3 секунды.
    1. Василий Наумкин 23 января 2014, 18:20 # 0
      Он не будет шустрее обычного поиска — алгоритм тот же.

      У меня проиндексировано 2 500 страниц, всего 35 000 слов в индексе + в чанках выводится pdoCrumbs. Похоже, пора что-то оптимизировать.
      1. Василий Наумкин 23 января 2014, 18:48 # 0
        Скопировал сайт на другой сервер — скорость выше в 6 раз.

        Толи я что-то накрутил на сервере, толи Linode расслабились. Буду разбираться.
        1. Виталий Валерьевич 24 января 2014, 00:32 # 0
          Да, пожалуй… что-то явно происходит. За 5 посещений сайта в течении дня 3 раза сайт был не доступен.
      2. Чикин Артур 23 января 2014, 18:31 # 0
        Добавить бы еще возможность выставлять в ручную приоритет некоторым ресурсам в выдачи по определенным запросам.
        1. Василий Наумкин 23 января 2014, 18:47 # 0
          Как ты себе это представляешь?

          Я только в виде синонимов, которые появились в прошлой версии.
          1. Чикин Артур 23 января 2014, 19:25 # 0
            Это просто хотелка)
            Еще хочу OpenSearch)
        2. Виктор Долгий 24 января 2014, 15:17 # 0
          Обновил. В логах это:
          [2014-01-24 13:16:31] (ERROR @ /index.php) [mSearch2] Method "get-msValues" not exists in class "mse2FiltersHandler". Could not retrieve filters from "-ms"
          
          1. Василий Наумкин 24 января 2014, 15:32 # 0
            А что это у тебя за тире в имени фильтра? Не должно такого быть.
            1. Виктор Долгий 24 января 2014, 15:37 # 0
              Я понимаю, однако просто вызвал сниппет mSearchForm на странице, с параметрами по умолчанию.
              1. Василий Наумкин 24 января 2014, 15:48 # 0
                Создавай тикет в поддержке и пиши доступы к сайту.

                Как доберусь до компа — разберусь.
                1. Виктор Долгий 24 января 2014, 15:55 # 0
                  Ок.
                  1. Виктор Долгий 27 января 2014, 04:06 # 0
                    Не смог на выходных оставить учетные данные, но выяснил, что проблема возникает при вызове mSearchForm и mFilter2 на одной странице (перестают отрабатывать оба компонента).
                    1. Василий Наумкин 27 января 2014, 04:07 # 0
                      Ну вот у меня на сайте такой проблемы не возникакет.

                      Потому и прошу создать тикет и оставить там доступы.
                      1. Виктор Долгий 29 января 2014, 11:57 # 0
                        Все, добрался до сайта и выяснилось, что MinifyX был всему виной…
            2. Перетягин Илья 28 января 2014, 15:54 # 0
              Не совсем косяк, но все же скажу…
              Очень много моментов сделано по умолчанию, например обертка поисковых подсказок, изменение цвета при наведении на пункты этих подсказок и т.д. Причем нету возможности настроить свою верстку в таких местах используя чанки, шаблоны.

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

              Становиться сложно сохранить «чистоту верстки», свою задумку, в свое время модх привлек сильное внимание именно из за того, что не надо за кем то переделывать, переписывать, а весь функционал выдает чистые значения, которые потом сам оформляешь как хочешь, при этом я думаю, что очень мало людей на модх, которые не понимают хтмл.
              Это все не в упрек конечно, компонент шикарный, но вот этот момент мне сегодня напомнил про выше описанный движок, так даже настроение упало )
              1. Василий Наумкин 28 января 2014, 16:14 # 0
                Всё, абсолютно всё оформление в чанках и файле default.css. И то и другое легко меняется.
                Ты можешь и default.js поменять, подключить свой autocomplete. Меняется даже файл, отвечающий на ajax, и класс фильтров.

                Так что не нужно обзываться, если не разбирался с кастомизацией.

                Можно конечно поставлять компоненты без чанков и стилей, но вряд ли это тебе понравится. Поэтому — все настроено по умолчанию, под bootstrap 3.
                1. Перетягин Илья 28 января 2014, 18:09 # 0
                  Тогда получается я действительно не полностью разобрался с кастомизацией. Приношу свои извинения.
                  1. Василий Наумкин 28 января 2014, 18:14 # 0
                    Посмотри вот здесь, недавно написал более-менее подробно.

                    Можно просто очистить системную настройку mse2_frontend_css и писать свои стили с нуля.
                    1. Перетягин Илья 28 января 2014, 18:39 # 0
                      Сегодня вот по этой доке + этой статье добавлял на сайт подсказки при наборе слов в поиск, но как я не пытался убрать цсс, так и не смог.
                      mse2_frontend_css очищал, после чего чистил кеш всего, что можно было, + к этому убивал историю браузера, менял браузер (это уже из разряда танцев с бубном было), но цсс файл как цеплялся к системе так и остался там, именно по этому и образовалось мнение, что его просто так не убрать, а вырезав его из js файла, где он подключается, сразу же задумался, что скорее всего потом все затрется и в целом так делать не красиво.
                      Плюсом к этому параметр tpl в снипете mSearchForm упорно не желал видеть мой чанк оформления строчек подсказок, а цеплял дефолтный (ну конечно все танцы с кешами и прочими вещами были проделаны заново).
                      Повторюсь, я четко осознаю, что я не специалист в программировании, от куда и вывод, что сам не понял что то, так что не каких упреков нету, да и не было…
                      1. Комментарий был удален.
                        1. Василий Наумкин 28 января 2014, 18:45 # 0
                          Больше похоже, что у тебя на сервер живет какой-нибудь кэш, типа php-apc. Смотри исходный код страницы, что там на самом деле подключается.

                          Вообще, в стандартном CSS очень мало, в основном все сделано стилями bootstrap3 в чанках.

                          Ну и на будущее — если ты купил дополнение, пиши в поддержку с такими вопросами, разберемся.
                          1. Перетягин Илья 28 января 2014, 18:50 # 0
                            Да проблем то нету, писать в тех. поддержку смысла не было, так как к концу дня все настроил как надо было, благо несколько лет с джумлой научили танцевать вокруг не понятного и не изведанного в свою пользу ))). Ну и уже думал, что так задумано, такой компонент, и просто написал, что как то странно все это, на что и получил ответ, что сам типа дурак иди учи мат.часть, от куда я понял, что сам был не прав, на этом и вопрос закрылся))).
                            Спасибо тебе Василий за твою работу и быстрые ответ!
                            1. Василий Наумкин 28 января 2014, 18:51 # 0
                              На здоровье!
                  2. Boris Akimenko 28 января 2014, 16:34 # 0
                    Илья, всё кастомизируется очень и очень.
                    Чего нет в доках — есть здесь (в поиске).
                    Дерзай ;)
                  3. Evgeny Epifanov 03 февраля 2014, 18:03 # 0
                    Василий, а подскажи еще вот что:
                    В форме поиска перед input добавляется:
                    <span role="status" aria-live="polite" class="ui-helper-hidden-accessible">5 results are available, use up and down arrow keys to navigate.</span>
                    где можно поменять его вывод или вообще удалить? А то из-за него верстка немного портится.
                    1. Василий Наумкин 03 февраля 2014, 18:08 # 0
                      Его добавляет jQuery UI для каких-то своих нужд.

                      Попробуй просто отключить через CSS:
                      .ui-helper-hidden-accessible {display:none;}
                    2. Evgeny Epifanov 04 февраля 2014, 00:47 # 0
                      Василий, а автодополнение по синонимам должно работать?
                      1. Василий Наумкин 04 февраля 2014, 05:13 # 0
                        Нет, в запросы сохраняются чистые запросы, без синонимов. Что юзер набирал, то и будет.

                        А быстрый поиск работает с ними, конечно.
                      2. yani 10 апреля 2014, 15:07 # 0
                        Василий, здравствуйте. А есть плейсхолдер времени поиска?
                        1. Василий Наумкин 10 апреля 2014, 15:11 # 0
                          Нет.

                          Но есть [^t^] — время загрузки страницы. Поиск в него тоже входит.
                          1. yani 10 апреля 2014, 21:32 # 0
                            Да, такую штуку я видела. спасибо )
                        2. Алексей 22 апреля 2014, 13:30 # 0
                          Интересно, как сделать такой симпатичный слайдер для цены как тут: www.disneystore.com/disney-princess/aladdin/mn/1000002/
                          Где ползунки могут показывать минимальную и максимальную цену
                          1. Василий Наумкин 22 апреля 2014, 14:50 # 0
                            А здесь что, не показывает?

                            Данные доступны и показаны, вопрос только в оформлении.
                          2. Алексей 07 мая 2014, 13:18 # 0
                            Принимает ли сниппет mfilter2 параметры типа leftjoin?
                            (для вывода дополнительных данных в чанках из дополнительно присоединенных таблиц)
                            Дописываю в
                            [[!mFilter2?
                            &leftJoin=`{"class:=":"msCsr","alias:=":"msCsr","on:=":"msCsr.pid = msProduct.id")`
                            &showLog=`1`
                            ...
                            
                            Но в логе никакого намека на присоединение новой таблицы.
                            Что я делаю не так?
                            1. Василий Наумкин 07 мая 2014, 13:25 # 0
                              Как минимум, это неправильный JSON, да и ":=" здесь вообще не нужно — это же условия в where.
                              1. Алексей 07 мая 2014, 13:39 # 0
                                Мне вообще было важно, принципиально это возможно или нет-)
                                Было бы здорово посмотреть примеры реализации, чтобы все стало сразу понятно.
                                Преобразовал строку в нормальный вид
                                &leftJoin=`{"class":"msCsr","alias":"msCsr","on":"msCsr.pid = msProduct.id"}`
                                однако тут где-то еще ошибка, т.к. в логе невесь что твориться:
                                0.0000451: xPDO query object created
                                0.0002410: leftJoined msProductData as Data
                                0.0001969: leftJoined msVendor as Vendor
                                0.0006871: leftJoined class as class
                                0.0006130: leftJoined alias as alias
                                0.0007579: leftJoined on as on
                                0.0000072: Grouped by msProduct.id
                                а все нашел пример — bezumkin.ru/sections/tips_and_tricks/2058/
                                1. Василий Наумкин 07 мая 2014, 13:49 # 0
                                  Выводит позиции не mFilter2, а используемый сниппет, например mSearch2 или msProducts.

                                  Если сниппет работает на pdoTools, то, конечно, он умеет делать join:
                                  &leftJoin=`{"msCsr":{"class":"msCsr","alias":"msCsr","on":"msCsr.pid = msProduct.id"}}`
                                  
                                  Вот здесь, внизу, есть продвинутый пример.
                                  1. Алексей 07 мая 2014, 13:56 # 0
                                    Нужно эти 2 примера вот сюда docs.modx.pro/components/pdotools/general-settings — очень, очень ценная инфа. Можно за один запрос к БД вывести всю нужную информацию. Еще бы приобщить ссылку www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins — тогда цены документации не будет.
                                    1. Василий Наумкин 07 мая 2014, 15:18 # 0
                                      Кто ж мешает? Документация у нас открытая — присылай pull-request.
                            Добавление новых комментариев отключено.