Фильтр по двум параметрам

Всем доброго времени суток! Я новичек, прошу кирпичами сразу не кидаться. Есть проблема. Создал таблицу MIGX:
[ {"caption":"Отзывы","fields": [ { "field":"nalichie", "caption":"В наличии", "inputTVtype":"listbox", "inputOptionValues":"Есть==yes||Нет==no" },{ "field":"name", "caption":"Имя" },{ "field":"ves", "caption":"Вес:" },{ "field":"cena", "caption":"Цена" },{ "field":"avatar", "caption":"Фото", "inputTVtype":"image" },{ "field":"link", "caption":"Ссылка" },{ "field":"class_css", "caption":"Класс (номер цифры)", "inputTVtype":"listbox", "inputOptionValues":"Один==pol_1||Два==pol_2||Три==pol_3||Четыре==pol_4||Пять==pol_5||Шесть==pol_6" },{ "field":"razdel", "caption":"Раздел материалов", "inputTVtype":"listbox-multiple", "inputOptionValues":"Плавающие полы==plav_pol||Бескаркас.Сист==beskarkas||Каркас.Перегор==karkas||Виброизоляция==vibro||Декор.Профиль==prof_dekor||Акуст.Матер==akust" },{ "field":"type_material", "caption":"Тип материала", "inputTVtype":"listbox-multiple", "inputOptionValues":"Мастика==mastika||SYLOMER==silomer||ЗИПС==zips||СВАП==svap||ШумаНет==shumanet||ШумоСтоп==shumostop||Вибростек==vibostek||Вибросил==vibrosil||Зипс-полы==zips_poly" } ] }]
Потом делаю вывод:
[[!getImageList? &tpl=`tpl_mater` &tvname=`materials` &docid=`5` &randomize=`1` &where=`{"nalichie:=":"yes","razdel:":"plav_pol","type_material:=":"shumanet"}` &includeTVs=`1` &processTVs=`1` ]]
Одному материалу может быть присвоено два раздела (razdel), к примеру Виброизоляция и Плавающие полы (присваивается через listbox-multiple при редактировании ресурса). Проблема в том, что если материалу присвоено два раздела, то вывод перестает работать, все дело вот в этом параметре, как мне кажется ( &where=`{«nalichie:=»:«yes»,«razdel:»:«plav_pol»,«type_material:=»:«shumanet»}`)
Внимание вопрос: Есть ли способ, для нуба, который работает на уровне синтаксиса modx сделать так, что бы фильтр срабатывал?
Выложите схему вашей таблицы и результирующую запись в БД. Сдается мне, что у вас информация о нескольких категориях хранится в одной ячейке типа razdel_1||Razdel_2 и т.п. Если так, то поиск по такой колонке крайне затруднителен.
Результирующую запись БД показать не могу( не знаю как до нее добраться. При редактировании строки в таблице (в доп полях в ресурсе) выглядит так: prntscr.com/5f7mui Еще, я раньше делал подобную штуку (в другом проекте), только присваивал такие поля (listbox-multiple) ресурсам. Вывод ресурсов делал через getResources, при этом все норм фильтровалось. Тут мне кажется сам сниппет getImageList не хочет это делать(
Результирующую запись БД показать не могу( не знаю как до нее добраться.
phpMyAdmin откройте и посмотрите. Вообще, если вы не знаете где и что у вас находится, то дела очень печальны.
Я возможно не такой профи как вы, но даже мне тут понятно, что дело вовсе не в БД! А в работе самого сниппета! Поэтому и спросил, может есть какой нибудь альтернативный вариант.
Чтобы вы знали, ппц как многое зависит от базы данных. А главное — сниппет тоже формирует запрос к БД, и если структура таблицы и данных позволяет, то запрос выполняется. Но если вы итак все знаете — не вопрос, удачи!
Почему же тогда getResources делает все так как нужно а getImageList нет?)
Откройте исходники этих сниппетов и ответьте себе на этот вопрос.
то что сниппеты по разному работают, это с самого начала было понятно, я про это с начала и писал) Мне просто интересно, если дело в сниппетах, зачем вы меня в БД отправляли, сразу бы послали лесом)))
Для того, чтобы вы нашли причину почему они поразному работают. Но плясать надо от того, где и в каком виде данных хранятся (потому что сниппеты не придумывают отдаваемые данные, а получают их из БД (да-да, именно оттуда (в нашем случае это именно так))). А если вы не только не знаете где они хранятся, но даже и не хотите этого выяснять, то да, можете собственно двигаться в любом интересном вам направлении, я вас не буду ни в чем убеждать.
Николай, Бинго! Специально для Вас. Мой вопрос решается небольшим изменением в вызове снипета getImageList
&where=`{"nalichie:=":"yes","razdel:find_in_set":"vibro","type_material:=":"shumanet"}`
Нужно просто подставить find_in_set и все. Представьте сколько бы я потерял времени, разбираясь в БД послушая Ваш стандартный (предлагаемый на большинстве форумов) совет — «надо разобраться в БД»)))
Поздравляю вас с успехом!
А сможете разобраться, какую это играет здесь роль? И почему это менее круто, чем нативный MySQL-ный метод find_in_set? И почему теперь я знаю, даже не заглядывая в ваши результирующие строки, что в БД у вас разделы хранятся в одной колонке, разделенные именно запятой, а не || или типа того?
И да, действительно, не тратьте время на изучение баз данных, это действительно ничего не дает :)
Я думаю тут дело в разной постановке задачи. На данный момент мне нужно было сделать интересующий меня вывод сниппетом. Возможно, эту задачу можно было решить более изощренными методами (коими Вы любите пользоваться), но опыт и навык работы с modx у всех разный. Да, вы знаете как работать с базами и можете написать нужный Вам сниппет или плагин, да, со своими знаниями Вы можете многим нос утереть (и не просто словами, а аргументируя), только нам то, обычным «смертным», зачем изобретать велосипед?) На абсолютное большинство задач уже есть готовые решения. Их просто нужно по искать, ну или спросить совета, может кто сталкивался с подобными проблемами (разве не для этого создаются подобные форумы). Ну а базы учить, скорее всего нужно, просто я до этого еще не дорос)
Уточняю: конкретно здесь, мы не решаем за других задачи, мы учим основам, чтобы в дальнейшем человек сам мог разбираться с подавляющим большинством задач. Если у вас другой Путь, вы можете им идти, но мимо нашего Клуба.
Как то грубовато, Николай, Вам не кажется? Я же смотрю ленту топиков, вопросы очень разные. Не ужели Вы каждого третьего посылаете мимо Вашего Клуба?
Нет, я не посылаю, я помогаю экономить время вам и мне. Если вы рассчитываете на готовые указания как решаются ваши задачи — здесь вы все равно это вряд ли получите. Здесь мы учимся, а не копипастим.
Будем иметь ввиду, спасибо)

Добавить комментарий