infp 09 декабря 2014 1 17
Всем доброго времени суток!
Я новичек, прошу кирпичами сразу не кидаться.
Есть проблема. Создал таблицу 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 сделать так, что бы фильтр срабатывал?
17 комментариев
Fi1osof1
Fi1osof 10 декабря 2014г в 09:04 #
Выложите схему вашей таблицы и результирующую запись в БД. Сдается мне, что у вас информация о нескольких категориях хранится в одной ячейке типа razdel_1||Razdel_2 и т.п. Если так, то поиск по такой колонке крайне затруднителен.
i
infp 10 декабря 2014г в 15:22 #
Результирующую запись БД показать не могу( не знаю как до нее добраться.
При редактировании строки в таблице (в доп полях в ресурсе) выглядит так: prntscr.com/5f7mui
Еще, я раньше делал подобную штуку (в другом проекте), только присваивал такие поля (listbox-multiple) ресурсам. Вывод ресурсов делал через getResources, при этом все норм фильтровалось. Тут мне кажется сам сниппет getImageList не хочет это делать(
Fi1osof1
Fi1osof 10 декабря 2014г в 15:30 #
Результирующую запись БД показать не могу( не знаю как до нее добраться.
phpMyAdmin откройте и посмотрите. Вообще, если вы не знаете где и что у вас находится, то дела очень печальны.
i
infp 10 декабря 2014г в 16:07 #
Я возможно не такой профи как вы, но даже мне тут понятно, что дело вовсе не в БД! А в работе самого сниппета!
Поэтому и спросил, может есть какой нибудь альтернативный вариант.
Fi1osof1
Fi1osof 10 декабря 2014г в 16:10 #
Чтобы вы знали, ппц как многое зависит от базы данных. А главное — сниппет тоже формирует запрос к БД, и если структура таблицы и данных позволяет, то запрос выполняется. Но если вы итак все знаете — не вопрос, удачи!
i
infp 10 декабря 2014г в 16:17 #
Почему же тогда getResources делает все так как нужно а getImageList нет?)
Fi1osof1
Fi1osof 10 декабря 2014г в 16:18 #
Откройте исходники этих сниппетов и ответьте себе на этот вопрос.
i
infp 10 декабря 2014г в 16:28 #
то что сниппеты по разному работают, это с самого начала было понятно, я про это с начала и писал)
Мне просто интересно, если дело в сниппетах, зачем вы меня в БД отправляли, сразу бы послали лесом)))
Fi1osof1
Fi1osof 10 декабря 2014г в 16:31 #
Для того, чтобы вы нашли причину почему они поразному работают. Но плясать надо от того, где и в каком виде данных хранятся (потому что сниппеты не придумывают отдаваемые данные, а получают их из БД (да-да, именно оттуда (в нашем случае это именно так))). А если вы не только не знаете где они хранятся, но даже и не хотите этого выяснять, то да, можете собственно двигаться в любом интересном вам направлении, я вас не буду ни в чем убеждать.
i
infp 10 декабря 2014г в 17:17 #
Николай, Бинго! Специально для Вас.
Мой вопрос решается небольшим изменением в вызове снипета getImageList
&where=`{"nalichie:=":"yes","razdel:find_in_set":"vibro","type_material:=":"shumanet"}`

Нужно просто подставить find_in_set и все.
Представьте сколько бы я потерял времени, разбираясь в БД послушая Ваш стандартный (предлагаемый на большинстве форумов) совет — «надо разобраться в БД»)))
Fi1osof1
Fi1osof 10 декабря 2014г в 17:48 #
Поздравляю вас с успехом!

А сможете разобраться, какую это играет здесь роль? И почему это менее круто, чем нативный MySQL-ный метод find_in_set? И почему теперь я знаю, даже не заглядывая в ваши результирующие строки, что в БД у вас разделы хранятся в одной колонке, разделенные именно запятой, а не || или типа того?

И да, действительно, не тратьте время на изучение баз данных, это действительно ничего не дает :)

i
infp 10 декабря 2014г в 18:14 #
Я думаю тут дело в разной постановке задачи. На данный момент мне нужно было сделать интересующий меня вывод сниппетом. Возможно, эту задачу можно было решить более изощренными методами (коими Вы любите пользоваться), но опыт и навык работы с modx у всех разный. Да, вы знаете как работать с базами и можете написать нужный Вам сниппет или плагин, да, со своими знаниями Вы можете многим нос утереть (и не просто словами, а аргументируя), только нам то, обычным «смертным», зачем изобретать велосипед?) На абсолютное большинство задач уже есть готовые решения. Их просто нужно по искать, ну или спросить совета, может кто сталкивался с подобными проблемами (разве не для этого создаются подобные форумы).
Ну а базы учить, скорее всего нужно, просто я до этого еще не дорос)
Fi1osof1
Fi1osof 10 декабря 2014г в 18:26 #
Уточняю: конкретно здесь, мы не решаем за других задачи, мы учим основам, чтобы в дальнейшем человек сам мог разбираться с подавляющим большинством задач. Если у вас другой Путь, вы можете им идти, но мимо нашего Клуба.
i
infp 10 декабря 2014г в 18:29 #
Как то грубовато, Николай, Вам не кажется? Я же смотрю ленту топиков, вопросы очень разные. Не ужели Вы каждого третьего посылаете мимо Вашего Клуба?
Fi1osof1
Fi1osof 10 декабря 2014г в 18:40 #
Нет, я не посылаю, я помогаю экономить время вам и мне. Если вы рассчитываете на готовые указания как решаются ваши задачи — здесь вы все равно это вряд ли получите. Здесь мы учимся, а не копипастим.
i
infp 10 декабря 2014г в 18:41 #
Будем иметь ввиду, спасибо)
Fi1osof1
Fi1osof 10 декабря 2014г в 18:42 #
Не за что.
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.