minishop2 сортировка по полю color

Приветствую,
подскажите на выводе

[[!pdoPage:empty=`Ничего не найдено...`? &element=`msProducts`&where=``]] 
[[!+page.nav]]
Как правильно прописать в условие where, один или два цвета,
в саму таблицу сохраняется в виде json как я вижу, в фильтр тоже могу вбить в формате json цвет
вопрос как правильно отсортировать по цветам фильтр
{«Data.color:LIKE»:"%цвет%"} не работает..., пробовал название цвета переводить в json, тоже не работает

где то еще вычитал что можно напрямую вводить типа
(Data.color LIKE '%цвет%') ANS some = else
но тож не сработало, или такой формат для where для pdotools?

не могу найти чтото документации по сортировке

видел гдето что можно поле color плагином перевести в текстовый формат,
если это сделать, сортировка заработает? например если через запятую вводить а потом лайками искать?
Галич Сергей
30 декабря 2014, 12:15
modx.pro
6
3 387
0

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

Василий Наумкин
30 декабря 2014, 16:06
1
+1
Если у товаров несколько цветов, то получится ерунда. А вообще, все JSON поля копируются в msProductOption.

Так что нужно просто присоединить этот класс и сортировать по нему:
[[!msProducts?
	&parents=`0`
	&leftJoin=`{
		"msProductOption":{
			"class":"msProductOption",
			"on":"msProductOption.key = 'color' AND msProductOption.product_id = msProduct.id"
		}
	}`
	&select=`{
		"msProduct":"*",
		"msProductOption":"value as color"
	}`
	&sortby=`msProductOption.value`
	&sortdir=`ASC`
	&tpl=`@INLINE <p>[[+pagetitle]] [[+color]]</p>`
	&showLog=`1`
]]
Источник вдохновения — bezumkin.ru/training/course2/3006/
    Галич Сергей
    30 декабря 2014, 16:31
    0
    Приветствую,
    спасибо — выдает результат, но я не правильно видимо сформулировал вопрос
    я имел ввиду есть ли возможность сделать выборку по определенному цвету или цветам? с помощью where в приведенном коде не срабатывает, либо я не правильно пробую:
    так?
    &where=`{"Data.color":"название цвета"}`
    Если у товаров несколько цветов, то получится ерунда.

    тоесть по нескольким цветам нельзя будет выбирать?
      Галич Сергей
      30 декабря 2014, 17:06
      0
      что то подобное возможно реализовать из коробки?
      &where=`{"Data.color:IN":["цвет 1","цвет 2"]}`
      или нужно дописывать?
        Василий Наумкин
        30 декабря 2014, 21:30
        0
        Data — это автоматически присоединённая таблица msProductData, в которой цвета записаны JSON строкой. Из JSON ты ничего не выберешь, потому что для MySQL это просто строка.

        Нужно выбирать из таблицы msProductData, и я уже показал тебе, как её присоединять. Даже ссылку дал на объяснение принципов работы.

        Дальше давай сам.
          Галич Сергей
          31 декабря 2014, 13:38
          0
          то есть из сниппета msProducts можно это сделать? без правок исходного кода?
          я пытаюсь понять просто, можно из него сделать это или проще свой сниппет написать, потому что явные способы не срабатывают…
          мало ли кто-то уже делал, зачем мне велосипед изобретать?)
            Василий Наумкин
            31 декабря 2014, 13:53
            0
            Естественно, можно. Я уже всё рассказал, осталось только сложить и подумать.

            Или думать не хочется, хочется готовое решение?
    Галич Сергей
    13 января 2015, 11:21
    0
    Всех с прошедшими праздниками!

    Привет, Василий.
    подскажи, хочу выдавать в результат поиска только товары, например, по связям имеющих главную роль («master»). Но при этом, чтобы был поиск по «slave».

    можно так сделать?

    вот что пробую:
    [[!msProducts:empty=`Ничего не найдено...`?
    	&parents=`[[*id]]`
    	&where=`[[!filterGenerate]]`
    	
    	&leftJoin=`{
    		"msProductOption":{
    			"class":"msProductOption",
    			"on":"msProductOption.key = 'color' AND msProductOption.product_id = msProduct.id"
    		}
    	}
    	`
    	&rightJoin=`{
    		"msProductLink":{
    			"class":"msProductLink",
    			"on":"msProductLink.slave = msProduct.id"
    		}
    		
    	}`
    
    	&select=`{
    		"msProduct":"*",
    		"msProductLink":"master as id",
    		"msProductOption":"value as color",
    		
    	}`
    	&link=`1`
    	&groupby=`msProductLink.master`
    	&sortby=`msProductOption.value`
    	&sortdir=`ASC`
    	&tpl=`tpl.msProducts.row`
    	&showLog=`1`
    ]]
    немогу допереть, можно ли подставить, при групировке, в вывод товара, значения из продукта который является основным, тоесть master?
    судя по всему у меня и гдето здесь есть ошибка, пытаюсь вывести хотя бы id главного товара — не выходит.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      11