Настройка фильтра в наборах по значениям списков и мультисписков

ЕСТЬ РЕШЕНИЕ
#1 31 января 2022 в 23:06

Уважаемые инстантоведы!

Подскажите, пожалуйста, решение.
Не могу настроить фильтр в наборе для значения мультисписка.
Его можно настроить или это баг?

P.S.: Блин, написал вроде корректно. Но нихрена не понятно. Надеюсь, что опытные поймут. Сейчас добавлю скриншотов.

Вот создаю поле «Тип» с типом «Мультисписок» (также параллельно создаю поле «Тип статьи» с типом «Список»):

Изображение

Далее для одной из статей проставляю галочки:

Изображение

Далее проверяю, что поле корректно отображается:

Изображение

Возвращаюсь в админку, в настройках типа записей создаю набор, в нём прописываю фильтр:

Изображение

Фильтр настроен и включён:

Изображение

На сайте фильтр корректно отображается:

Изображение

Но не работает!

Изображение
#2 31 января 2022 в 23:17

Значение поля списка-мультивыбора, это битовая маска. В вашем случае при двух выбранных элементах в базе данных это выглядит так: «00101». Вариант фильтрации «Содержит»-«Маркетинг» в этом случае не сработает. Можно попробовать «Равно»-"??1??", но очень в этом не уверен.

#3 1 февраля 2022 в 00:02

Можно попробовать «Равно»-"??1??", но очень в этом не уверен.

Loadырь

Не, маска у LIKE должна быть вида
__1__

И чтобы маска сработала указывать надо не "Равно" (ведь тогда запрос будет без LIKE), а "Оканчивается на"

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

#4 1 февраля 2022 в 00:47

Самое прикольное, что, если бы у автора темы не был нужен вариант с последним значением, то всё бы сработало.

К примеру, в набор попадают записи с отмеченным 2-м и 4-м значением. Тогда в фильтре набора укажем равно 01010 и всё будет работать.

Не знаю почему, но: 011 запишется в базу именно так, а при запросе вернётся 11, а вот 010 (с ноликом и в конце) вернётся в первозданном виде. Ноль в конце строки делает строку строкой))

--------------------------------

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

#5 1 февраля 2022 в 01:00

Можно попробовать «Равно»-"??1??", но очень в этом не уверен.

Loadырь

Не, маска у LIKE должна быть вида
__1__

Sonat

Супер, вот это помогло!!

 Sonat, спасибо большое!!

Добавлено спустя 1 минуту

И чтобы маска сработала указывать надо не "Равно" (ведь тогда запрос будет без LIKE), а "Оканчивается на"

Sonat

Пробовал «содержит» и «заканчивается на» — оба варианта корректно работают на актуальной версии движка (2.15.1).

Добавлено спустя 3 минуты

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

Sonat


Тоже думаю, что это не совсем корректно.

Я бы предложил сделать следующие доработки:

1. Для поля типа «Мультисписок» добавить тип соответствия «соответствует маске».
И внести данный уже работающий функционал в документацию.
Кому-то он точно будет удобен и полезен.
Интуитивно догадаться тяжеловато.

2. Доработал бы логику работу фильтров для мультисписков, чтобы «содержит» и далее значение — тоже корректно срабатывала. Бинарные маски — не самое простое дело для нетехнарей. И не самое читабельное.

Добавлено спустя 3 минуты

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

Олег Васильевич я

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

Но я же как раз про этот тип и говорю.

Вот скрин:

Изображение
#6 1 февраля 2022 в 01:02

Супер, вот это помогло!!

Владимир Переверзев

С таким подходом, можно было просто ввести содержит 010 и тоже б сработало (потому как у вас сейчас значение поля 00101). И содержит 0010 тоже сработает. Вот только срабатывание это для вашего случая ложно-положительное))

#7 1 февраля 2022 в 21:24

С таким подходом, можно было просто ввести содержит 010 и тоже б сработало (потому как у вас сейчас значение поля 00101). И содержит 0010 тоже сработает. Вот только срабатывание это для вашего случая ложно-положительное))

Олег Васильевич я

Олег Васильевич я, возможно, мы чуть-чуть друг друга недоняли.

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

Но если говорить в целом, то задача фильтра — это НЕ некая комбинация значений мультисписка, а банальное — «если для данной записи среди выбранных значений в мультисписке выбрано значение „Маркетинг“ (независимо от выбора или не выбора других значений в мультисписке) — то выводить все такие записи в этом наборе.

Пример, который описал выше  Sonat — полностью решает именно мою локальную задачу.
То есть именно не вопросительные знаки, а подчёркивания.

— — — — -

А представляемая Вами маска — это уже совсем другая задача: „покажи в наборе все записи, для которых вот это значение — выбрано (единичка в нужной позиции в маске), а вот эти значения — не выбраны (нули в определённых позициях в маске)“.

У меня такой задачи пока не стоит. Поэтому маски вида __1__, _1___, ___1_,… — меня полностью удовлетворяют. ))

Как я уже описал выше, я бы предложил описать данную логику в документации, а также допилить, чтобы обычное „включает “Маркетинг»" — тоже работала. Хочешь — «включает» и далее слово, хочешь — «соответствует маске» — и далее маска и документация к ней. 

Это было бы бомба-ракета. )))

Добавлено спустя 19 часов

Уважаемые коллеги и соратники.

Вопрос мы решили.
Но я постфактум уже внимательнее присмотрелся к документации и увидел, что ответ в целом УЖЕ описан в документации.

Вот общая, вводная информация о создании наборов:
docs.instantcms.ru/manual/ctypes/datasets

А вот уже подробнее о настройке наборов:
docs.instantcms.ru/manual/ctypes/datasets/add

И в этом документе как раз и описано решение:

Изображение

.

Ну и вот в этом документе ещё подробнее о списке и мультисписке написано:
docs.instantcms.ru/manual/ctypes/fields/types#список

Но и данный топик — надеюсь, что тоже будет полезным дополнением к документации.

P.S.: Обратил внимание, что официальная документация не очень легко и быстро нагугливается по интуитивно подбираемым словам. Надеюсь, что данный топик в этом плане тоже будет дополнительной наводкой. :)

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