Сортировка в msProducts

Существует ли возможность в sortby сделать ORDER BY CASE как в SQL?
Андрей Ятин
10 октября 2013, 18:20
modx.pro
2 878
0

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

Андрей Ятин
10 октября 2013, 22:38
1
0
Разобрался. У меня идёт вызов через runSnippet. Может кому пригодится:

$ord = "
            'Выключатели',
            'Розетки электрические',
            'Розетки TV',
            'Розетки телеф/комп',
            'Розетки акустические',
            'Управление жалюзи',
            'Светорегуляторы',
            'Терморегуляторы теплого пола',
            'Датчики движения',
            'Выключатели автоматические',
            'Вывод кабеля',
            'Заглушки'
        ";
    $sortby = "FIELD(Data.product_type,".$ord.")";
    Василий Наумкин
    10 октября 2013, 23:13
    1
    0
    Еще можно указать &resources=`2,3,5,10,1` и пустой &sortby=``, тогда товары выведутся в указанном порядке.

    Вчера про это писал.
      Андрей Ятин
      11 октября 2013, 02:06
      0
      Вариант с id совсем не то. У меня нужно сортировать по неуникальному полю характеристики.
        Андрей Ятин
        11 октября 2013, 03:24
        0
        Василий, и ещё вопрос. Как мне нужно написать параметр where, чтобы в результате в строке запроса получить:
        `Data`.`product_type` != 'Рамки' AND `Data`.`product_type` != 'Вставки' AND (`Data`.`external_signs` = 'пластик кремовый глянцевый' OR `Data`.`external_signs_extra` = 'пластик кремовый глянцевый')
        Не выходят скобки.
          Андрей Ятин
          11 октября 2013, 03:26
          0
          И если никак, то как можно обратится к modx_ms2_product_categories?
            Василий Наумкин
            11 октября 2013, 06:01
            0
            &where=`[
            	`Data`.`product_type` != 'Рамки' AND `Data`.`product_type` != 'Вставки' AND (`Data`.`external_signs` = 'пластик кремовый глянцевый' OR `Data`.`external_signs_extra` = 'пластик кремовый глянцевый')
            ]`

            Просто массив из одной строки.
              Андрей Ятин
              11 октября 2013, 13:36
              0
              Василий, а как это параметр правильно в runSnippet передать?
                Василий Наумкин
                11 октября 2013, 13:38
                0
                $result = $modx->runSnippet('msProducts', array(
                	'parents' => 15,
                	'where' => "[`Data`.`product_type` != 'Рамки' AND `Data`.`product_type` != 'Вставки' AND (`Data`.`external_signs` = 'пластик кремовый глянцевый' OR `Data`.`external_signs_extra` = 'пластик кремовый глянцевый')]",
                ));
                  Андрей Ятин
                  11 октября 2013, 13:53
                  0
                  Нет, не работает. Этот параметр не попадает в общий where condition. fromJSON его почему-то убивает.
            Андрей Ятин
            11 октября 2013, 05:04
            0
            Получилось, но как по мне, то не совсем корректно. В сниппете msProducts внёс изменения начиная с 70-ой строки:
            if (strpos($scriptProperties['where'],'{') === false) $where[] = $scriptProperties['where'];
            else $tmp = $modx->fromJSON($scriptProperties['where']);
            //return print_r($where);
            if (is_array($tmp)) {
            	$where = array_merge($where, $tmp);
            }
            Единственное что не совсем корректная проверка на JSON, как по мне.
            В таком варианте я могу передать параметр where вида:
            Data.product_type NOT LIKE 'Рамки' AND Data.product_type NOT LIKE 'Вставки' AND (Data.external_signs LIKE 'пластик кремовый глянцевый' OR Data.external_signs_extra LIKE 'пластик кремовый глянцевый')
            И тогда работает.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          10