[mSearch2] Версия 1.4.1 с улучшенным фильтром

Привет, друзья! Пока в Мюнхене проходит конференция, я полирую mSearch2.

Улучшения коснулись блока «Вы выбрали». Раньше все фильтры были в куче, а теперь понятно, что именно и где выбрано. Было — стало:
Чтобы это заработало после обновления, вам нужно зайти в outer чанки фильтров и добавить класс filter_title к их названиям. То есть
<h4>[[%mse2_filter_[[+table]]_[[+filter]]]]</h4>
заменить на
<h4 class="filter_title">[[%mse2_filter_[[+table]]_[[+filter]]]]</h4>
Если новый класс не будет найден, то блок «Вы выбрали» будет работать, как и раньше — без разделения на фильтры.

Те, кто уже кастомизировал фильтр под свои нужды, знает, что в javascript классе mSearch2 есть массив options, в котором хранятся настройки для работы с элементами фильтра.
var mSearch2 = {
	initialized: false,
	options: {
		wrapper: '#mse2_mfilter',
		filters: '#mse2_filters',
		results: '#mse2_results',
		total: '#mse2_total',
		pagination: '.mse2_pagination',
		//...
	},
Раньше, если вы хотели изменить эти настройки, вам нужно было скопировать default.js, переименовать и указать в системных настройках. Понятное дело, что обновления больше не затрагивали этот файл.

Так что в новой версии я добавил параметр &filterOptions сниппету mFilter2. Теперь вы можете указать ему JSON строку с настройками и они заменят таковые в классе mSearch2.
[[!mFilter2?
	&parents=`0`
	&filterOptions=`{
		"wrapper": "#new_filter",
		"filters": "#new_filters",
		"pagination": "#my_pagination"
	}`
То есть, вы можете менять настройки javascript без изменения кода. Если вам не нужно радикально переписать логику работы, то этого хватит для многих кастомизаций.

Третье большое изменения — фильтр научился работать со значениями по умолчанию ТВ параметров. Раньше, если значения ТВ не было в БД, фильтр о нём не знал. Теперь логика работы изменена, и значения по умолчанию фильтруются наравне с остальными.

Еще немного багфиксов и улучшений:
— Исправлена работа фильтра boolean.
— Исправлен баг с работой кнопки очистки, если &limit=`0` (нужно обновить pdoTools еще).
— Исправлена работа фильтра с отключенными friendly_urls.
— Процессор индексации теперь понимает JSON в ТВ параметрах. То есть, по идее, он может индексировать MIGX значения, но насколько хорошо это будет работать — не знаю.

Новая версия уже в магазине, можно обновляться.
Василий Наумкин
21 ноября 2015, 10:18
modx.pro
1
3 217
+8

Комментарии: 14

Василий Столейков
21 ноября 2015, 21:14
+1
Круто! Приятные изменения. А значения ТВ-шек по умолчанию, я думал ты уже и забил на них… )))
Степан Прищепенко
23 ноября 2015, 14:37
-3
Какой ты молодец Василий, справился с такой трудной задачей, золото! а не программист. Даже не представляю сколько времени у тебя заняло «Третье большое изменения», хотя нет догадываюсь… 3 секунды (у меня конечно подольше около 2 часов, куда же до тебя). А еще ты так мастерски удаляешь коменты на столько чисто, что даже признаков их существования не остается. Только автору комента даже не подумал сообщить что мол: «дружище, это действетильно то что нужно, и я внесу эти изменения в mSearch2 чтобы поиск также велся и по дефолтным параметрам...» Ан нет, взял готовое решение, потихонькому удалил сообщение о нем, сделал копипаст и буквально на след день выложил новую версию. Ух сама быстрота, просто вжиииик и готово!
И не было бы обидно (так как это open-source и я прекрасно понимаю это) если бы хоть комент не подчистил… не порядочно с твоей стороны!
    Василий Наумкин
    23 ноября 2015, 14:57
    0
    Извини, но твоего кода в mSearch2 нет, можешь сравнить:

    На написание правильного присоединения таблиц, чтобы это нормально работало при больших объёмах, ушло более 3х секунд.

    А твой комментарий я убрал просто потому, что он не нужен.
      Степан Прищепенко
      23 ноября 2015, 15:04
      -2
      Те же яица только в профиль. Удивительное совпадение событий, не правда ли? Если я не прав и по космическим причинам это решение действительно пришло нам одновременно, что же тогда прошу прощения.
        Василий Наумкин
        23 ноября 2015, 15:37
        0
        Сделать поддержку default_text просили уже давно, о чём говорит самый первый комментарий.

        А твой комментарий просто заставил меня уже этим заняться, раз начали писать свои решения. Код отличается, и на мой взгляд серьёзно:

        Ты сначала присоединяешь все ТВ к ресурсу, а потом уже фильтруешь по id и имени. Мне кажется, что мой вариант быстрее, ибо присоединяются только нужные ТВ.

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

        Казалось бы, все должны быть рады, но нет, нужно прибежать с разоблачениями.
          Степан Прищепенко
          23 ноября 2015, 19:04
          +2
          Я всегда рад новым качественным дополнениям, особенно твоих продуктов, но ты меня тоже пойми, причину я уже расписал, вкратце еще раз повторюсь: я столкнулся с проблемой (сообщил тебе, ты же мне не ответил, что эта проблема известна и решение когда-либо будет, просто сказал, мол «ищет то что есть в БД») -> решил ее -> поделился, не проходит и дня мои комменты исчезают вместе с их фактом существования (что для меня более чем удивительно), а ты заявляешь об исправлении этой ошибки => что я мог подумать ??? Я это увидел в следующем ракурсе: что ты использовал или позаимствовал решение (понятно что его можно реализовать как минимум 3-мя способами), не поставив меня в известность (а мне между прочим было бы приятно услышать, что ты его принял к сведению) и сообщил всем мол вот экую штуку сделал. Как бы ты чувствовал себя на моем месте? Ладно, это капля в море, как ни как, появилось новое полезное обновление, тоже приятно осозновать это.
            Василий Наумкин
            23 ноября 2015, 19:18
            0
            Да, понимаю, виноват.

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

            Спасибо тебе большое, что заставил меня это сделать! Держи в ответ новый раздел документации.
              Степан Прищепенко
              23 ноября 2015, 22:08
              0
              Принятно. Спасибо!
              Зависимые фильтры — это круто конечно, но можно добавить визард (цепочка зависимых фильтров) или скрывать или отображать те или иные фильтры если они не попадают под критерий (но это уже дело техники). Вижу в примере заменен вид стандартных плейсхолдеров ...{$pagetitle}… — хорошо, а то путаница и порой невозможность выполнить сниппет в INLINE иногда вызывает неудобство (но это уже PDO). От себя 5 копеек, сегодня напоролся, может пригодится: в карту контекста не попадают ресурсы помеченные на удаление, как результат getParentIds, getTree, getChildIds их не увидят. Мне пришлось ручками сувать в карту эти ресурсы, а потом уничтожать их после работы моего метода, дабы не влиять на дальнейшие скрипты после работы метода. Хочу воспользоваться моментом, так сказать удовлетворить любопытсво, так как пишу большой плагин для MS2, скажи пожалуйста сколько ты видел работающих плагинов (а не компонентов расширяющих функционал через класс) для своего магазина? Именно плагинов, и не просто доп полей, а именно тех что не плохо дополняют функционал??? И на сколько «болезненена» может быть его переделка на Ms3 если он использует почти все системных событий и имен action плагина miniShop2?
                Василий Наумкин
                23 ноября 2015, 22:14
                0
                Зависимые фильтры — это круто конечно
                Круто, только их нет. Это же эмуляция — просто скрытие того, что не нужно.

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

                От себя 5 копеек, сегодня напоролся, может пригодится: в карту контекста не попадают ресурсы помеченные на удаление, как результат getParentIds, getTree, getChildIds их не увидят.
                Это нормально, так и должно быть.

                сколько ты видел работающих плагинов
                Полный modstore.pro

                Новая версия miniShop будет стараться всё делать максимально безболезненно.
                  Степан Прищепенко
                  23 ноября 2015, 22:37
                  0
                  Да я понял про эмуляциию, пока фильтры работают относительно элементарно и на не сложных проектах вполне пригодня в таком виде. Спасибо этот issue не видел.
                  Отлично, надеюсь на это!
                  Воеводский Михаил
                  23 ноября 2015, 22:15
                  0
                  Писал достаточно объемный функционал на стандартных плагинах из-за необходимости выдавать решения «здесь и сейчас» без особого обдумывания, куда и как это приведет. Плагины разрешали/запрещали смену количества в корзине, меняли цены товаров в корзине, устанавливали скидки на товары в корзине, изменяли некоторые параметры заказов — это все неполный перечень рабочего функционала на плагинах в рамках одного проекта. С одной стороны, надо бы все это выносить в отдельные классы корзины и заказов. С другой, когда каждое из этих действий осуществляется в разных компонентах, а компоненты разрабатываются независимо от основного, плагины являются прекрасным решением для упрощения взаимодействия компонентов.

                  Уверен, что при разработке новой версии minishop совместимость на уровне событий будет сохранена.
                    Степан Прищепенко
                    23 ноября 2015, 22:34
                    0
                    Занимаюсь чем то похожим, за основу взят плагин на Ms2 он цепляет карту => куча таблиц, и отдельно плагин которых прогоняет через себя все события, как результат нагружен функционал в админке родного MS, расширены фильтры и скрипты магазина со стороны клиента. Также надеюсь на высокий пилотаж и сохранность работы. Спасибо за ответ.
        Это сообщение было удалено
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        14