Автор дополнения
Василий Наумкин
Пакетов
36
Закачек
105 966
Автор дополнения
Пакетов
36
Закачек
105 966
Версия 1.8.4-pl
Дата выпуска 24.03.2017
Загрузки 5 909
Просмотры 434
Внимание, этот компонент требует версию PHP 5.3 или выше! Если ваш сайт использует PHP ниже требуемого, установка этого дополнения может его сломать.
Внимание, этот компонент требует версию MODX не ниже 2.3 !


Поисковый сниппет mSearch2

  • Поддерживается сколько угодно словарей одновременно, по умолчанию: русский и английский.
  • Базовые формы слов (поисковый индекс) хранятся отдельно, с учётом их количества и веса в документе.
  • Можно индексировать комментарии Tickets
  • Индексируются любые поля CRC, наравне с обычными. В том числе, конечно и свойства товаров miniShop2.
  • Высокая скорость работы при выводе результатов, обеспечивающаяся pdoTools.
  • Собственный раздел в менеджере, для индексации и внутреннего поиска.
  • Улучшенный алгоритм поиска и подсветки результатов.
  • Отдельно настраивается вес слова в каждом поле ресурса.
  • Настраивается бонус за точное нахождение запроса в документе.
  • Настраивается бонус за нахождение всех слов запроса в документе.

При первой установке загружаются словари phpMorphy — они необходимы для генерации словоформ. Для начала работы нужно проиндексировать ваш сайт в админке.

Посмотреть компонент в реальной работе можно на сайте автора.

Как индексируются документы


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


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

В зависимости от системных настроек из БД извлекаются нужные колонки ресурсов, комментарии и разбиваются на слова. Затем по каждому слову генерируются словоформы, при помощи phpMorphy и сохраняются в таблицу индекса.
Запись состоит из самого слова, его веса (из настроек) и ссылки на документ, где оно встречается.

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

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

Благодаря плагину, входящему в комплект, вам не нужно следить за актуальностью индекса — он делает всё сам, в полном соответствии с системными настройками.

Индексировать весь сайт вручную нужно только в двух случаях: при первой установке и при изменении параметров в системной настройке mse2_index_fields.

Как работает поиск


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

Затем скрипт получает все возможные формы этих слов из словарей и проводит поиск по индексу, получая id подходящих ресурсов и вес слов.

Если запрос состоял всего из одного слова — то на этом всё и заканчивается, результаты возвращаются в зависимости от суммарного веса документа.

Если же слов было 2 и более, то проводятся дополнительные проверки и начисление бонусов:
1. Проверка на точное совпадение фразы. Если в документе есть фраза ровно в том виде, в котором её ищет пользователь — этому результату будет добавлен бонус. По умолчанию 5 очков.

2. Проверка на нахождение всех слов из запроса в документе. Если в одном документе встречаются все слова запроса, в той или иной форме — еще один бонус, по умолчанию 5 очков.

Таким образом, наверху окажутся наиболее релевантные документы.

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

Пример вызова на странице


После установки компонента и первичной индексации, нужно вызвать сниппет mSearch2 на любой странице сайта и отправить ему $_GET или $_POST запрос с ключем query.

Вот простейшая страница с поиском:
<form action="" method="get">
	<input type="text" name="query" value="[[+mse2_query]]" />
	<button type="submit">Поиск</button>
</form>

[[!getPage?
	&element=`mSearch2`
	&showLog=`1`
	&limit=`10`
]]

<div class="pagination">
	[[!+page.nav]]
</div>

Сниппет поиска и фильтрации mFilter2

Дальше очень много буков, которые довольно подробно объясняют как работать с mFilter2 и какими возможностями он обладает.
Там много сложностей, которые могут сбить с толку неподготовленного читателя, поэтому я сразу вас предупреждаю: сниппет специально спроектирован так, чтобы выдавать рабочий результат при простейшем вызове:
[[!mFilter2?
	&parents=`11`
]]

Нужно только указать контейнер, в котором есть опубликованные ресурсы. При любых проблемах и непонятностях включайте вывод лога, туда подробно пишется, что происходит:
[[!mFilter2?
	&parents=`11`
	&showLog=`1`
]]



По умолчанию выводятся все фильтры, даже если в них нет смысла — то есть, всего один возможный параметр для фильтрации. Это поведение можно отключить параметром
&showEmptyFilters=`0`

Требуется getPage или совместимый сниппет, например getPageExt.

Настройка


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

&resources=`1,2,3,4,5`
Список ресурсов, через запятую, для вывода на сайте. Предусмотрен для работы со сторонними сниппетами и для совместимости с первой версией.

Обратите внимание, все ресурсы, указанные здесь, обязательно пройдут дополнительную фильтрацию следующими параметрами.

Поиск через переменную $_REQUEST[’query’]=запрос
Если параметр resources пуст, то будет проведена попытка поиска через mSearch2 и дальше будут работать уже найденные им ресурсы, по той же логике, как если бы они были указаны вручную.

&parents=`1,2,3,4,5`
Список родителей для поиска и вывода ресурсов. Если ресурсы, определённые в предыдущих параметре не являются потомками этих родителей — они не будут выведены.

То есть, параметр parents фильтрует resources — это нужно помнить. Если вы не хотите, чтобы он вмешивался, оставьте его пустым.

Если нет ни поискового запроса, ни списка готовых id — параметр parents найдет ресурсы в указанных разделах самостоятельно. И только если пусты все три параметра вы не получите никаких результатов работы.

&showHidden=`1`, &showDeleted=`0`, &showUnpublished=`0`
Эти три параметра дополнительно фильтруют id ресурсов, определённых в предыдущих параметрах. по умолчанию включен показ скрытых ресурсов, а удалённые и неопубликованные — спрятаны.

Ресурсы, сумевшие пробиться через эти проверки, будут участвовать в построении фильтров и выводе результатов на странице.

Построение фильтров


mFilter2 умеет работать с любой таблицей и выводить абсолютно любые параметры фильтрации с абсолютно причудливых комбинациях и видах. Я серьезно.

Основы для такой гибкости две:
1. Отдельный класс логики построения и работы фильтров, который можно расширить, по примеру MS2.
2. Специальный формат указания параметров работы этому классу.

Начнем со второго: все, абсолютно все фильтры указываются в одном важнейшем параметре &filters=``.
Параметры фильтрации имеют следующий вид
кодовое имя таблицы|поле таблицы:метод обработки
— если не указано имя таблицы, считается, что это resource
— если не указан метод обработки, считается, что это default

Можно указывать сколько угодно параметров, через запятую, например:
[[!mFilter2?
	&limit=`10`
	&filters=`
		ms|price:number
		,parent:parents
		,tv|tvname
	`
]]

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

Всего 3 типа методов:
1. Получение информации о параметрах фильтров и подходящих ресурсах
2. Приготовление данных для вывода
3. Фильтрация по параметру

Для указанного выше примера у нас вызовутся следующие методы:
1. getResourceValues()
2. getMsValues()
3. getTvValues()

Эти 3 метода получат данные фильтров из таблиц вашей базы данных. Думаю, понятно, из каких именно. Затем фильтры готовятся на вывод следующей группой методов:

1. buildNumberFilter()
2. buildParentsFilter()
3. buildDefaultFilter()

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

Дальше фильтры выводятся на страницу.

Чанки и оформление


У mFilter2 есть один основной чанк, куда выводятся все результаты его работы, с основными плейсхолдерами:
[[+filters]] и [[+results]].

За результаты отвечают два сниппета: по умолчанию getPage, который запускает mSearch2 для вывода собственно строчек с документами. Вы можете указать и другие сниппеты, например getPageExt и msProducts. Параметры, соответственно:

&paginator=`getPage`
Сниппет разбивки на страницы, запускает &element

&element=`mSerch2`
Сниппет, непосредственно выводящий результаты работы. Принимает параметр &resources=`` и выставляет плейсхолдеры пагинации и total. Рассчитано на pdoTools сниппеты, с getResources не проверял.

Понятно, все параметры, с которыми был вызван mFilter2 будут переданы в эти 2 сниппета: включить получение ТВ, картинок, или еще что-нибудь.

Пока все понятно с двумя дополнительными сниппетами? Продолжаем.

А вот фильтры строятся самостоятельно, причем для каждого можно указать 2 собственных чанка:

&tplFilter.outer.таблица|поле=`tpl.mFilter2.filter.outer`
Чанк-обертка, в который вставляются строки с фильтрами (плейсхолдер [[+rows]]).

&tplFilter.row.таблица|поле=`tpl.mFilter2.filter.checkbox`
Чанк для оформления одного параметра фильтра, по умолчанию — это checkbox. В комплекте есть еще и чанк для чисел — его нужно указать самостоятельно.

Для нашего примера, выходит, всем параметрам кроме цены подойдут стандартные чанки. А для цены указываем свой, числовой чанк:
&tplFilter.row.ms|price=`tpl.mFilter2.filter.number`

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

Фильтрация


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

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

Делается это ровно так же, как и в других новых компонентах: файл default.js переименовывается и указывается в системной настройке mse2_frontend_js. Ровно та же история и с css.

Обратите внимание, что при фильтрации получается реальный, рабочий url, который при обновлении страницы выдаст вам ту же страницу, без участия javascript.
То есть, все будет сделано на php, никаких обновлений сразу после загрузки страницы, как было в первой версии.
Поисковикам и SEO оптимизаторам должно понравиться!

Пример: http://bezumkin.ru/search.html?resource|parent=769,865&query=minishop

Предварительные результаты


У mFilter еще с первой версии есть интересная фишка — предварительные результаты фильтрации. Это маленькие циферки рядом с каждым фильтром, которые показывают, сколько вы получите результатов, если кликните на него.

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

То есть, у нас несколько десятков (сотен, тысяч) дополнительных фильтраций.

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

Функция безусловно приятная и полезная, но очень тяжелая для работы. Она напрямую зависит от количества фильтруемых результатов и параметров фильтров — то есть, сделать так, чтобы она не тормозила вообще нигде, невозможно.

Поэтому я сделал возможность её отключения, параметр
&disableSuggestions=`1`

При активации этой опции вы получите максимальную скорость, но циферки рядом с фильтром пропадут.

Сортировка результатов


Как уже упоминалось ранее, mFilter2 умеет сортировать сразу по нескольким полям таблицы. Это не какая-то особая фишка — это просто возможность самого mySql, которую сниппет раньше не поддерживал.

Формат указания параметра &sort=`` очень похож на работу &filters=``:
&sort=`
	resource|publishedon:asc
	,resource|createdby:desc
`

Тут нужно знать следующее: в зависимости от используемого сниппета вывода результатов, псевдонимы базы данных могут отличаться. Например в mSearch2 ресурсы джоинятся под псевдонимом modResource, а в msProducts — как msProduct.

Поэтому при работе с msProducts нужно указывать вот так:
&sort=`
	ms_product|publishedon:asc
	,ms_product|createdby:desc
	,ms|price:asc
	,ms_vendor|name:desc
`

В классе фильтров за эту логику отвечает метод getSortFields(), который вы можете изменить, как и все остальные.

По умолчанию заданы вот такие соответствия для псевдонимов таблиц:
ms => Data
ms_product => msProduct
ms_vendor => Vendor
tv => TV
resource => modResource

Вот что сниппет получит при обработке параметров из последнего примера:
`msProduct`.`publishedon` ASC, `msProduct`.`createdby` DESC, `Data`.`price` ASC, `Vendor`.`name` DESC

То есть, &sort=`` напрямую завязан на сниппет, выбирающий данные, и то, как у него внутри соединены таблицы. Поэтому, при любых ошибках сортировки включаем вывод лога и проверяем системный журнал — где то будет ругань.

Заключение


Итак, соберем всё в кучу:
— Сниппет умеет выводить указанные ресурсы, искать по запросу и фильтровать их по родителям и статусу.
— Он найденных id он строит фильтры и выводит результаты
— А затем удобно и приятно фильтрует
— При этом вы можете изменить его работу как на фронтенде (переделав javscript), так и в бэкенде (расширив класс фильтрации).

Основные методы стандартного класса фильтрации:
  • getResourceValues() — получение полей из таблицы modResource
  • getMsValues() — таблица msProductData, все свойства товаров, такие как цена, вес и прочие расширенные плагинами
  • getTvValues() — таблица modTemplateVarResource, то есть ТВ параметры
  • getMsOptionValues() — таблица msProductOption, в которой лежат параметры от json полей товара, таких как size и color.
  • buildDefaultFilter() — подготовка данных для вывода чекбоксами
  • buildNumberFilter() — вывод чисел от минимального до максимального
  • buildBooleanFilter() — обработка параметров да/нет
  • buildVendorsFilter() — вывод имен производителей товаров MS2
  • buildParentsFilter() — получение и вывод 2х непосредственных родителей ресурса
  • buildCategoriesFilter() — получение и вывод непосредственного родителя ресурса
  • buildFullnameFilter() — получение и вывод имени пользователя из таблицы modUserProfile
  • getSortFields() — метод получения имен полей для сортировки
  • filterDefault() — стандартный метод фильтрации чекбоксов
  • filterNumber() — фильтрация по числам, параметр должен быть между меньшим и самым большим значением фильтра

Создание своих фильтров


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

Делается это просто:
1. Нужно создать файл, например myfilter.class.php и положить его в /core/components/msearch2/custom/filters/
2. Объявить в файле класс, например myFilter, который будет наследовать оригинальный класс фильтрации
class myFilter extends mse2FiltersHandler {
}
3. Указать в системной настройке mse2_filters_handler_class имя класса — myFilter.

Теперь в этом файле вы можете писать любые новые методы, или переделывать имеющиеся.
Для получения данных используются методы getИмяМетодаValues(), для подготовки фильтра — buildИмяМетодаFilter(), а для фильтрации filterИмяМетода. Можно посмотреть, как работают эти 3 типа методов в filters.class.php.

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

Заготовка класса с фильтром mynew:
class myFilter extends mse2FiltersHandler {

	function getMyNewValues(array $fields, array $ids) {
	}

	function buildMyNewFilter(array $values) {
	}

	function filterMyNew(array $requested, array $values, array $ids) {
	}
}


Вызов этого фильтра применительно к ТВ по имени test:
[[!mFilter2?
	&parents=`2`
	&filters=`
		tv|test:mynew
	`
]]


Версия 0.6.0

Поиск


Улучшен процесс индексирования ресурсов. Теперь в него попадает меньше ненужных слов, которые не влияют на результаты. Минимальная длина слова теперь равна 4, советую обновить у себя системную настройку mse2_index_min_words_length и переиндексировать документы.

Запросы, состоящие из 2х и более цифр, без букв, участвуют в поиске независимо от этой настройки. Это сделано для поиска артикулов, id и прочей числовой информации.

Если для вывода результатов работы фильтра используется сниппет mSearch2, то он будет показывать вес найденных результатов. То есть, при фильтрации поиска работает параметр [[+weight]] в чанке, и вы видите, какой суммарный вес набрал тот или иной результат.

Соответственно, сниппет mSearch2 умеет принимать в параметр &resources=`` JSON строку с id ресурсов с качестве ключей, и их весом, в качестве значений. Именно эту особенность и использует предыдущая фича.

Фильтрация


Добавлен параметр &toPlaceholder=``. Если в нем что-то есть, то mFilter2 вместо вывода готового чанка сохранит все свои данные в плейсхолдеры [[+total]], [[+results]] и [[+filters]]. Может пригодиться для сайтов со сложной версткой.

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

Параметр &disableSuggestions=`` переименован в более логичный &suggestions=``. Его можно выставить в 0 или 1, для выклвкл предсказаний результатов фильтра.

Фильтрация ресурсов с генерацией предсказаний довольно тяжелая операция, поэтому теперь в логе админу выводится общее кол-во фильтров, результатов и фильтраций.


Из этого следуют и 2 новых параметра, отключающих предсказания при больших выборках:
&suggestionsMaxResults=`1000` — максимальное количество фильтруемых ресурсов. Если больше — предсказания отключатся.
&suggestionsMaxFilters=`200` — то же самое, только считаются сами фильтры.

Конечно, эти 2 параметра можно и отключить, выставив в 0, но лучше подобрать циферки, отвечающие возможностям вашего хостинга — чтобы оградить себя от возможных тормозов.

Добавлена возможность выводить фильтры не только чекбоксами, но и радиокнопками. У сниппета mFilter2 появился параметр &suggestionsRadio=``, в котором нужно указать радиофильтры, например:
[[!mFilters2?
	&filters=`
		resource|class_key
		,ms|new:boolean
	`
	&suggestionsRadio=`
		resource|class_key
		,ms|new
	`
	&tplFilter.row.resource|class_key=`tpl.mFilter2.filter.radio`
	&tplFilter.row.ms|new=`tpl.mFilter2.filter.radio`
]]
Отличие радиокнопок от чекбоксов в том, что за раз можно выбрать только один пункт из группы, и для соседних элементов предсказания не будут суммироваться. То есть, это переключатель фильтра, а не выбор нескольких вариантов.

При указании &parents=`` добавлена поддержка мультикатегорий miniShop2.

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

Это сделано для тех случаев, когда фильтруются параметры с запятыми. Укажите
[[!mFilters2?
	&filters=`
		resource|class_key
		,ms|new:boolean
	`
	&values_delimeter=`:`
]]
и у вас будет такой url: search.html?resource|parent=547:87:55

Обратите внимание, что на фронтенде переменная mSearch2Config.delimeter переименована в mSearch2Config.filter_delimeter. Если вы модифицировали стандартный javascript — нужно поправить.

Скорость


Но самое значительное улучшение новой версии — скорость подсчета предварительных результатов поиска. Благодаря нескольким не особо хитрым оптимизациям, время работы сокращено во много раз.

К примеру, вот на этой странице при клике на фильтр класса Ticket раньше было 2,5 сек, а теперь — 0.03 сек.

Достигается это заменой функций in_array() и array_diff() на комбинацию array_flip() + isset(), что при больших массивах и многих итерациях даёт поистине потрясающий прирост производительности.

1.8.4-pl

  • Added rawurldecode to decode search query on some servers.

1.8.3-pl

  • Fixed possible bug with unselected numeric checkbox filters on page reload.

1.8.2-pl

  • Possible XSS fixes.

1.8.1-pl

  • Added support of a numeric fields without a sliders.

1.8.0-pl

  • Ability to use {core_path} placeholder in &customPath option.
  • Fixed bug with case-sensitive ms2 products options.
  • Removed third parameter from mSearch2 class constructor.
  • Fixed bug with short search queries in manager.
  • Fixed a little javascript bug with slider.
  • Added automatic support of decimals in slider.
  • Updated jQueryUI to version 1.12.1.

1.7.3-pl

  • [mSearch2] Improved compatibility with MySQL 5.7.

1.7.2-pl

  • [mFilter2] Added encoding of url to support special symbols like percentage.

1.7.1-pl

  • Some security fixes.

1.7.0-pl

  • [mFilter2] Fixed processing of the link with multiple sort options.
  • [mFilter2] Updated jQuery UI to version 1.12.1.

1.6.8-pl

  • [mFilter2] Fixed double submit of the form.

1.6.7-pl

  • [mFilter2] Fixed the reset of inactive option in the select.
  • [mFilter2] Fixed default option chunk.

1.6.6-pl

  • [mFilter2] Improved handling of radio inputs in the default javascript.

1.6.5-pl

  • [mFilter2] Improved behavior of "reset" button.
  • [mFilter2] Fixed history navigation when you returning back to the first page.

1.6.4-pl

  • Another improvements of compatibility with PHP 7.

1.6.3-pl

  • Ability to override javascript autoLoad property.

1.6.2-pl

  • Fixed work of the &showEmptyFilters parameter with "categories", "parents" and "grandparents" filters.

1.6.1-pl

  • Improved compatibility with PHP 7.

1.6.0-pl

  • [mFilter2] Improved support of ms2 product options.
  • [mFilter2] All filter methods are receives the name of field to work.

1.5.16-pl

  • [mFilter2] Added parameter "cacheTime".
  • [mFilter2] Cache disabled by default.
  • [mFilter2] The support of dots in the names of filters.

1.5.15 pl

  • Improved compatibility with PHP 7.1.
  • Fixed passing of Fenom tags into intro text of resources.

1.5.14 pl

  • Fixed error in default javascript under IE9.

1.5.13 pl

  • Fixed model for MySQL 5.7.

1.5.12 pl

  • [mFilter2] Categories filters are now uses menutitle if not empty.

1.5.11 pl

  • [mFilter2] Fixed some bugs with url params with ajaxMode == button or scroll.
  • [mFilter2] Improved support of multibyte characters.

1.5.10 pl

  • Fixed issues with pdoTools 2.3.4.
  • [mSearch2] Added parameter &toSeparatePlaceholders.

1.5.9 pl

  • Improved load of pdoTools.
  • [mFilter2] Trim TVs values.

1.5.8 pl

  • [mFilter2] Fixed small bug with disabling filters when there are no results.

1.5.7 pl

  • [mSearch2] Fixed work of &toPlaceholder with &returnIds.

1.5.6 pl

  • [mFilter2] Fixed insert of suggestions in "option" tag with brackets in text.
  • [mFilter2] Improved filter "boolean".

1.5.5 pl1

  • Fixed static plugin

1.5.5 pl

  • [mFilter2] Fixed wrong form submission when mSearch2.autoLoad is false.

1.5.4 pl

  • [mFilter2] Added parameter &ajaxMode: default, scroll or button.
  • [mFilter2] Added support of pdoTitle with enabled &registerJs.

1.5.3 pl

  • [mFilter2] Fixed rare bug with empty results when there is no filters and &toSeparatePlaceholders enabled.

1.5.2 pl

  • [mSearch2] Added system events mse2OnBeforeSearchIndex and mse2OnSearchIndex.

1.5.1 pl

  • [mSearch2] Fixed work of search aliases.

1.5.0 pl

  • [mSearch2] New search algorithm.

1.4.3 pl

  • [mSearch2] A small adjustment of default search settings.
  • [mSearch2] New snippet parameter &onlyAllWords.

1.4.2 pl

  • [mFilter2] Fixed bug with filter on not first page.

1.4.1 pl

  • [mFilter2] Fixed boolean filter.
  • [mFilter2] Fixed bug with clear button right after page load.
  • [mFilter2] Support of disabled friendly urls.
  • [mFilter2] Improved "You have selected" element.
  • [mFilter2] New parameter &filterOptions for overwrite javascript config.
  • [mFilter2] Added support for default values of TVs.
  • [mSearch2] Index processor can parse JSON in TVs.

1.4.0 pl

  • [#32] [mFilter2] Support of History Api.
  • [#31] [mFilter2] Added clear button.
  • Ability to send requests to another page without ajax.

1.3.9 pl

  • Ability to use several pagination elements.

1.3.8 pl

  • Base support of miniShop2.3 without SKU.

1.3.7 pl

  • Fixed some warnings in system log.
  • [#39] Added option &showSearchLog for enabled &showLog.
  • [#38] Fixed placeholder "weight" of snippet mSearch2 when it used inside mFilter2.

1.3.6 pl

  • [mFilter2] Fixed bug with wrong suggestions on page reload.

1.3.5 pl

  • [mFilter2] Fixed handling of quotes in filters.

1.3.4 pl

  • [mFilter2] Improved boolean filter.

1.3.3 pl1

  • Updated version of pdoTools in the installer.

1.3.2 pl1

  • [mSearch2] Added new system option "mse2_index_all".
  • [mSearch2] Added new system option "mse2_index_split_words".

1.3.1 pl

  • [mFilter2] Fixed "filter_key" placeholder in outer chunks.

1.3.0 pl

  • [mFilter2] Added filters "month" and "day".
  • [mFilter2] Ability to use one field multiple times in filters.
  • [mFilter2] Improved suggestions for more optimal processing.
  • [mFilter2] Ability to set aliases for filters.
  • [mFilter2] Aliases used for templates names.
  • [mFilter2] Fixed suggestions for dates filters.
  • [mFilter2] Fixed &showEmptyFilters in dates filters.

1.2.7 pl

  • [mFilter2] Fixed search with &parents parameter.

1.2.6 pl

  • [mSearch2] Improved simple search for additional bonuses.

1.2.5 pl

  • [#34] [mSearchForm] Fixed &autocomplete=`0`.

1.2.4 pl1

  • [mFilter2] Fixed adding new filters from build methods.
  • [mFilter2] Fixed possible E_NOTICE.

1.2.3 pl2

  • [#33] [mFilter2] Fixed build of TVs filters.
  • [mFilter2] Fixed limit on search.
  • [mFilter2] Fixed displaying of empty filters on page.

1.2.2 pl

  • [mFilter2] Fixed display order of specified &filters.
  • [Main] Removed register of jQuery on frontend.

1.2.1 pl

  • [mFilter2] Added support of "autotag" TVs.

1.2.0 pl

  • [mFilter2] Added triggering of jQuery event "mse2_load".
  • [mFilter2] Added support of pdoTools 1.10.
  • [mFilter2] Added filter "decimal".
  • [mFilter2] Fixed default javascript for decimal values in slider.
  • [mFilter2] Fixed search in filter.

1.2.0 rc1

  • [mFilter2] Ability to add new filters from build methods.
  • [mFilter2] Support of special options of miniShop2 products in "key==value" format.

1.1.5 pl1

  • [#11] Added support of msVendor.
  • Improved processing of tags in quick search.

1.1.4 pl1

  • Fixed pagination links in ajax requests.

1.1.3 pl

  • Improved indexing manager page.

1.1.2 pl

  • [mSearch2] Fixed parameter &toPlaceholder.

1.1.1 pl

  • Changed sort of parents filters to menuindex.
  • Fixed autocomplete when unpublished resources are found.
  • Fixed retrieving of resource fields.

1.1.0 pl

  • Improved search index and algorithm.
  • Ability to specify indexed fields for search by parameter &fields=``.
  • Ability to disable additional results by LIKE search by parameter &onlyIndex=``.
  • Fixed loading Font Awesome.
  • Added support of AjaxManager.
  • [#30] [mSearch2] Added "not found" message when results are limited by snippet parameters.
  • [#29] Returned lost button "Remove all queries".
  • [#27] Added ability to specify properties set in element and paginator name.
  • [#25] Added select filters.
  • [#24] [mFilter2] Added filtering of negative numbers in slider.
  • [#23] Added placeholder "results" to &toSeparatePlaceholders=`1` mode.
  • Fixed ajax filtering with &toSeparatePlaceholders=`1`.
  • Improved snippet mSearch2 when &returnIds=`1`.

1.0.4 pl

  • Improved UI for MODX 2.3.
  • Added Font Awesome icons.
  • Added ability to install new dictionary by double click on grid row.
  • Improved chunks.

1.0.3 pl

  • [#21] Added support filtering by date for TV of type date.
  • [#20] All templates of filters are converted to lowercase.

1.0.2 pl

  • [#14] Changed build filters methods.
  • Fixed E_NOTICE in mFilter2.

1.0.1 pl

  • [#14] Added passing of the filter name in the method of build.
  • Improved support of TVs with type "listbox" and "tag".
  • Do not call highlight method on search results if query is empty.

1.0.0 pl1

  • [#10] [mFilter2] Fixed bug with sort in Safari and Firefox.
  • [#9] [mFilter2] Added set of placeholder "mse2_filters_count".
  • Improved load if pdoFetch class.
  • Fixed possible incorrect characters in the English dictionary.
  • Added manager page with dictionaries.
  • Added new snippet "mSearchForm" with autocomplete.
  • Improved registering of frontend scripts.
  • Fixed replacement of aliases in the search query.
  • Improved javascript slider
  • Fixed overwriting parameters &sortby and &sortdir. Parameter &sort has priority.

1.0.0 beta2

  • Fixed [[+total]] placeholder for new pdoPage versions.
  • More convenient suggestions.
  • Added filter "grandparents".
  • Added ability to update chunks on package upgrade.
  • Added manager page with words aliases.
  • Added manager page with search queries.
  • Improved mSearch2::Search() for aliases support.
  • Improved mSearch2::Highlight() for more exact cutting of text.
  • Enabling of parameter "showLog" of snippets displays also log of search.
  • Added system parameter "like_match_bonus".
  • Fixed possible warnings when word from dictionary has incorrect symbols.

0.9.1 pl2

  • Improved verification of search query.
  • [mSearch2] Parameter "forceSearch" enabled by default.

0.9.0 pl

  • [mFilter2] Changed default &paginator=`` to "pdoPage".
  • [mFilter2] Improved filtration of conditions for retrieve resources. Now it handle end snippet with parameter &returnIds=`1`.
  • [mSearch2] Optimized for last version of pdoTools.
  • [mSearch2] Added parameter "forceSearch" to specify whether or not to show list of resources without search query.
  • Improved javascript. Hide of block "limit" when no results.
  • Improved speed of mseFiltersHandler2::filterDate().
  • Default chunks support Bootstrap3.
  • Fixed context switch in action.php

0.8.4 pl

  • Added filter by year of document. For example: "publishedon:year".
  • Improved search algorithm, when there is only one word in query.
  • Improved buildParentsFilter(). Now it works for parents from different contexts.
  • Added support of placeholders [^q^] and [^qt^].

0.8.3 pl2

  • Improved check of "limit" parameter.

0.8.3 pl2

  • Returned missed function "implode_r" into index processor.

0.8.3 pl1

  • [mSearch2] Improved search algorithm.
  • [mFilter2] Fixed processing parameters of snippet.

0.8.2 pl1

  • [mFilter2] If no results, message about it will be returned in "&tplOuter=``".

0.8.2 pl

  • [mFilter2] Fixed work with MS2 multicategories.
  • [mFilter2] Improved working with search results.
  • [mSearch2] Improved search algorithm.

0.8.1 pl1

  • [mFilter2] Improved work with modified &queryVar=`` and &parentsVar=``.
  • [mFilter2] Improved return of error messages, when nothing found.
  • [mFilter2] Improved work with limit, when page loaded by direct link.
  • [mFilter2] Improved sort links.
  • [mFilter2] Array with config for frontend is now available as placeholders with prefix "mse2_". E.g. [[+mse2_start_sort]], [[+mse2_tpls]] etc.

0.8.0 pl

  • [#7] You can prefix ids in "&resources=``" and "&parents=``" with dash for excluding from query.
  • [#5] Added parameter "&toSeparatePlaceholders=``" to snippet mFilter2. Parameter "&toPlaceholder" renamed to "&toPlaceholders".
  • Fixed issues when parents not in current contexts.
  • Added parameter "&hideContainers=``" to both snippets.
  • Added parameters "&tplWrapper=``" and "&wrapIfEmpty=``" to snippet mSearch2.
  • Accelerated method mse2FiltersHandler::filterNumber().
  • Fixed bug in filters, when TVs has capital letters in the name.
  • [mFilter2] Added default implementation of "limit" parameter.
  • [mFilter2] Added default implementation of range slider.
  • [mFilter2] Added default implementation of list of selected inputs.
  • Method "mSearch2.load()" in default javascript can receive filter parameters and callback function.

0.7.0 pl

  • Added support for list-style TVs.
  • Fixed issues with pdoTools installation.

0.6.2 pl2

  • [mFilter2] New parameter "tpls" for change tpl of rows in request.
  • [mFilter2] Fixed warning in log when no MS2 installed.
  • [mFilter2] Fixed cache problem when retrieving products in multicategories, again.

0.6.1 pl

  • [mFilter2] Added support of old browsers without history api. They will use hash in url.

0.6.1 rc1

  • Added method mse2FiltersHandler::buildCategoriesFilter().
  • Added method mse2FiltersHandler::buildFullnameFilter().
  • Added ability to work with mSearch1 for smooth upgrade.
  • Fixed bug with installation when "archive_with" setting is enabled.
  • Improved work with MS2 multi categories.
  • Fixed sort of filter values in ascending order.

0.6.0 beta

  • System setting "mse2_index_min_words_length" is set to 4 by default, for exclude prepositions.
  • Numbers with length >= 2 are always in search, no matter what set in "mse2_index_min_words_length".
  • Now mSearch2::getSuggestions() can be overloaded in class mse2FiltersHandler.
  • [mFilter2] Added support for MS2 multi categories.
  • [mFilter2] Added support for specify limit.
  • [mFilter2] Added parameter "toPlaceholder".
  • [mFilter2] Parameter "disableSuggestions" is now boolean "suggestions".
  • [mFilter2] Added parameter "suggestionsMaxResults" for disable suggestions when too many results.
  • [mFilter2] Added parameter "suggestionsMaxFilters" for disable suggestions when too many filters.
  • [mFilter2] Added parameter "suggestionsRadio" for radio filters.
  • [mFilter2] Added chunk "tpl.mFilter2.filter.radio".
  • [mFilter2] Added parameters: "filter_delimeter", "method_delimeter" and "values_delimeter".
  • [mFilter2] Added saving of weight of found resources, if used snippet mSearch2 for display items.
  • [mSearch2] Parameter "resources" now can take a JSON string with id as a key, and weight as a value.
  • [mSearch2] Added total number of filter operations in log.
  • Speed improvements.

0.5.1 pl2

  • Fixed work with "&includeTVs" when snippet mFilter2 calls snippet mSearch2.
  • Added verification for non existing filter methods.
  • Filter speed improvements.

0.5.1 pl1

  • Added excluding not searchable resources from index.
  • Small improvements of default javascript.

0.5.1 beta2

  • Added msFiltersHandler::getMsOptionValues() method. You can use &filters=`msoption|size,msoption|color` now.
  • Added update of main filter log on ajax requests, if enabled.
  • Added parameter "disableSuggestions" for very fast filtration. if enabled, you will not see small numbers next to the filter parameters.
  • Improved indexing. It is recommended to update the search index manually.

0.5.0 beta2

  • Added snippet mFilter2
  • Added default javascript
  • Added default css

0.4.0 beta

  • Improved search algorithm. Added %LIKE% search for words, that was not found in index.
  • Improved highlight of search results for %LIKE% results.

0.3.0 beta1

  • Fixed snippet offset bug

0.3.0 beta

  • Improved search algorithm
  • Improved highlight of search results
  • Improved search snippet

0.2.0

  • Added manager pages
  • Added indexing plugin

0.1.0

  • Initial release with relevant morphological search.

Последние обсуждения в сообществе MODX.pro