Всего 125 668 комментариев

Алексей Смирнов
23 марта 2021, 10:36
0
Снипет уже написан. getImageList там есть параметр sort. Он идет с MIGX.
Извеняюсь… человеку же ресурсы нужны… Да, только снипет.
Алексей Смирнов
23 марта 2021, 10:35
0
Можно сделать. Вам нужно зайти сюда:
docs.modx.com/current/en/extras/migx/migx.frontend-usage
и найти параметр sort

Извеняюсь… Вам же ресурсы нужны… Да, только снипет. и хитрые манипуляции.
Александр Туниеков
23 марта 2021, 10:29
0
надо
'modUser'=>[
                    'class' => 'modUser',
                    'on' => 'modUser.id = modUserGroupMember.member',
                ],
И надо вам добавить groupby
{'getTable' | snippet : [
    'table'=>[
        'class'=>'modUserGroupMember',
        'actions'=>[
            'remove' =>[
                'cls' => 'btn btn-danger',
                'icon' => 'fa fa-trash-o',
                'row' => [], 
        ],
            'update'=>[
                'cls' => 'btn btn-default',
                'icon' => 'fa fa-edit',
            ],
        ],
        'pdoTools'=>[
            'class'=>'modUserGroupMember',

            'limit'=>'5',
            'leftJoin'=>[
                'modUserProfile'=>[
                    'class' => 'modUserProfile',
                    'on' => 'modUserProfile.internalKey = modUserGroupMember.member',
                ],
                'modUser'=>[
                    'class' => 'modUser',
                    'on' => 'modUser.id = modUserGroupMember.member',
                ],
                'msOrder'=>[
                    'class' => 'msOrder',
                    'on' => 'modUser.id = msOrder.user_id',
                ],
                'msOrderProduct'=>[
                    'class' => 'msOrderProduct',
                    'on' => 'msOrder.id = msOrderProduct.order_id',
                ],
                
            ],
            'where'=>[
                'modUserGroupMember.user_group'=>2,
            ],
            'select'=>[
                'modUserProfile'=>'*',
                'modUser'=>'*',
                'msOrder'=>'SUM(msOrder.cost) as sum',
                'msOrderProduct'=>'SUM(msOrderProduct.count) as count',
            ],
            'groupby'=>'modUser.id',
            'sortdir'=>'DESC',
            'sortby'=>'',
        'decodeJSON'=>1,
        ],
        'checkbox'=>1,
        'autosave'=>1,
        'row'=>[

                'id'=>[
                    'label'=>'id',
                ],

                 'fullname'=>[
                    'label'=>'Имя',
                    'filter'=>1,
                    ], 
                 'email'=>[
                    'label'=>'Email',
                    ], 
                 'count'=>[
                     'label'=>'Товаров',
                    ],
                 'sum'=>[
                     'label'=>'Сумма',
                    ],
                 'active'=>[
                     'label'=>'Статус',
                    ],
                    
            ],
    ],
]}
и сортировка не понятная 'sortdir'=>'DESC',
'sortby'=>'',
Павел Гвоздь
23 марта 2021, 08:21
0
без инструкций
Нет. Давали инструкцию. Мне больше делать нечего, как методом тыка писать взаимодействие с их АПИ?..)
Денис
22 марта 2021, 20:24
0
Добрый вечер.
Приджойнил modUser и таблицы минишопа, выборка работает, но выводится только один пользователь с ссумарными параметрами остальных пользователей. Не понятно почему.
Подозреваю что как то не так обратился к modUser
'modUser'=>[
'class' => 'modUser',
'on' => 'modUser.id = modUser.active',
],


{'getTable' | snippet : [
    'table'=>[
        'class'=>'modUserGroupMember',
        'actions'=>[
            'remove' =>[
                'cls' => 'btn btn-danger',
                'icon' => 'fa fa-trash-o',
                'row' => [], 
        ],
            'update'=>[
                'cls' => 'btn btn-default',
                'icon' => 'fa fa-edit',
            ],
        ],
        'pdoTools'=>[
            'class'=>'modUserGroupMember',

            'limit'=>'5',
            'leftJoin'=>[
                'modUserProfile'=>[
                    'class' => 'modUserProfile',
                    'on' => 'modUserProfile.internalKey = modUserGroupMember.member',
                ],
                'modUser'=>[
                    'class' => 'modUser',
                    'on' => 'modUser.id = modUser.active',
                ],
                'msOrder'=>[
                    'class' => 'msOrder',
                    'on' => 'modUser.id = msOrder.user_id',
                ],
                'msOrderProduct'=>[
                    'class' => 'msOrderProduct',
                    'on' => 'msOrder.id = msOrderProduct.order_id',
                ],
                
            ],
            'where'=>[
                'modUserGroupMember.user_group'=>2,
            ],
            'select'=>[
                'modUserProfile'=>'*',
                'modUser'=>'*',
                'msOrder'=>'SUM(msOrder.cost) as sum',
                'msOrderProduct'=>'SUM(msOrderProduct.count) as count',
            ],
            'sortdir'=>'DESC',
            'sortby'=>'',
        'decodeJSON'=>1,
        ],
        'checkbox'=>1,
        'autosave'=>1,
        'row'=>[

                'id'=>[
                    'label'=>'id',
                ],

                 'fullname'=>[
                    'label'=>'Имя',
                    'filter'=>1,
                    ], 
                 'email'=>[
                    'label'=>'Email',
                    ], 
                 'count'=>[
                     'label'=>'Товаров',
                    ],
                 'sum'=>[
                     'label'=>'Сумма',
                    ],
                 'active'=>[
                     'label'=>'Статус',
                    ],
                    
            ],
    ],
]}
Артем
22 марта 2021, 20:18
+1
НО не исключает к сожалению по ID
Этот код и не должен что-то исключать. Результирующий массив лежит в переменной $result, в ней и нужно смотреть. $array_test уже не нужен.

{foreach $result as $id => $value}
  id: {$id} - count: {$value}
{/foreach}
Andrey
22 марта 2021, 20:14
0
в любом случае спасибо! Нашел другой вариант, не связанный с fenom :D
Andrey
22 марта 2021, 20:07
0
Приветствую! Спасибо за ответ, складывает действительно, НО не исключает к сожалению по ID повторяющиеся элементы, т.е. получается вот так:
id: 1 - count: 2
id: 2 - count: 1
id: 2 - count: 8
получается предыдущая 2-ка никуда не делась!
Антон Тарасов
22 марта 2021, 17:59
0
Насколько помню можно через CSS для класса контейнера капчи переопределить местоположение
Aleksanders
22 марта 2021, 11:39
0
Yandex приостановил выдачу API. Как заставить автоматически переводить сайт?
Андрей Степаненко
22 марта 2021, 10:45
0
То же пробовал, аналогичный вывод получился…
Андрей Степаненко
22 марта 2021, 10:44
0
Ах да забыл про это написать.
Стартую изолированный Modx, а не из под того же скрипта который его запустил
Пишет все в логи, а уже из логов читаются сообщения.
Сергей Шлоков
22 марта 2021, 10:43
0
Есть вариант как мокнуть xpdo?
В этом как раз и жопа. Вместо дополнительного уровня абстракции (как это сделано в Evolution — $modx->db) modX тупо наследуется от xPDO. И в итоге хрен ты чего сделаешь.
Андрей Степаненко
22 марта 2021, 10:40
0
MODX плохо поддаётся юнит-тестированию.

Из за этого и встроил PHPunit в Crontabmanager
Ибо чтобы настроить PHPUnit для modx мозг взорвется пока это сделаешь.

crontabmanager использует твою наработку по запуску скриптов на бэкенде (спасибо)))).
За счет чего полноценно стартуют тесты в Modx.
Андрей Степаненко
22 марта 2021, 10:35
0
Codeception — особо не знаком с ним. Можно попробовать встроить и его. Разницы то особо нету какой фреймворк запускать из под crontabmamager
Андрей Степаненко
22 марта 2021, 10:33
0
При интеграции с разными сервисами частенько что то ломается.
Не совсем понятно, зачем нужны тесты рабочего сайта по расписанию. Обычно тестируют разработку перед деплоем. Протестировал — замёрджил — задеплоил.
Банальный ответ: Для автоматического тестирования)))))))))))
Сергей Шлоков
22 марта 2021, 10:33
0
MODX плохо поддаётся юнит-тестированию. Поэтому юзаем Codeception.
Сергей Шлоков
22 марта 2021, 10:29
0
Не совсем понятно, зачем нужны тесты рабочего сайта по расписанию. Обычно тестируют разработку перед деплоем. Протестировал — замёрджил — задеплоил.

Ну и по поводу вышеописанных примеров тестов. Они нарушают все базовые правила юнит-тестирования — обращения к файловой системе и базе данных недопустимы. Их обычно мокают. Это уже больше функциональное тестирование. И для этого есть шикарный фреймворк Codeception.