Получение данных из всех MIGX (не только по id документа)
Добрый день!
Назначаю заказу нескольких исполнителей (в MIGX).
Есть ли возможность получить, к примеру, список ВСЕХ заказов определённого исполнителя, не заходя в каждый заказ по по его id документа?
Заранее буду благодарен за ответ.
Назначаю заказу нескольких исполнителей (в MIGX).
Есть ли возможность получить, к примеру, список ВСЕХ заказов определённого исполнителя, не заходя в каждый заказ по по его id документа?
Заранее буду благодарен за ответ.
Комментарии: 15
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Ведь не просто так был создан снипет getImageList?
хорошаяидея…Скорее, «не просто так был создан MIGX DB». Советую переделать на него, пока не обросли данными (гайд), и фильтровать по-человечески.
Конечно фильтр должен быть настроен с учётом тех данных, которые в базе
Или в случае с MIGX через джоины и LIKE
К примеру, в исполнителе добавить MIGX со списком заказов, в которых исполнитель участвовал или участвовал ранее (т.е. был назначен, а потом удалён — но это НЕ КРИТИЧНО).
Получается, потом можно просматривать не все заказы, а только те, в которых хотя бы раз назначался исполнителем.
Такое вот дублирование информации (про костыль я уже сказал — но это реально снизит нагрузку — НЕ ПРИДЁТСЯ просматривать все заказы).
Естественно, вручную добавлять — это… Я просто не представляю, как АВТОМАТИЧЕСКИ добавить заказ исполнителю (в MIGX), если в заказе он назначается исполнителем (тоже MIGX).
Заказу можно задать несколько исполнителей (из тикетов Исполнители) — вручную это делается только в этот момент времени и только в Заказах.
Есть тикеты — Исполнители
Можно ли реализовать автоматическое добавление заказа и ИСПОЛНИТЕЛЮ, чтобы не бегать по Исполнителям и вручную не добавлять им Заказы?
При сохранении Заказа (либо в момент добавления Исполнителя в Заказе) проверяется список Исполнителей и им, соответственно (по id тикета), заносятся id Заказов?
Честное слово, я где-то уже видел подобную реализацию (добавление данных в migx другого тикета при изменении) — но сейчас не могу найти страницу.
1. Считывается TV MIGX этого ресурса (формируется массив id Исполнителей)
2. В цикле (по id Исполнителей) вытаскиваются и переписываются с учётом новых данных TV MIGX Исполнителей.
Как пишутся плагины на сохранение ресурса найдёте здесь
Как вытащить значение TV MIGX ресурса тоже найдёте (я надеюсь)
Как преобразовать JSON в массив и получить нужные данные знаете я надеюсь
Как используя массив данных с помощью foreach пройтись получить объекты ресурсов, а из них вытащить TV MIGX. — преобразовать JSON в массив — этот массив наполнить новыми данными — преобразовать в JSON и переписать TV MIGX тоже можно загуглить.
Я думаю справитесь, а если что по ходу дела поможем.
Я так понял, что в тот момент, как я всё сделаю (как описано), мне придёт понимание, что нужно было всё делать иначе :)
Создается плагин на событие OnDocFormSave (не делал ранее)
1) При сохранении документа проверяется ID родителя — если это не Заказ-ничего не делать.
2) Находится ресурс по ID документа, далее — поле MIGX Исполнитель. (не делал ранее)
Последовательно просматривается список Исполнителей (ID Исполнителя):
2.1) Находится ресурс по ID Исполнителя
2.2) Находится поле MIGX Заказы
2.3) Проверяется, есть ли уже запись об этом заказе (ID документа заказа совпадает с ID поля MIGX Исполнителя)
2.3.1) Если записи нет (т.е. в ЗАКАЗЕ был назначен новый Исполнитель) — в поле MIGX Исполнителя добавляется ID заказа. В дальнейшем, если вдруг в ЗАКАЗЕ будет убран Исполнитель — НИЧЕГО делать у Исполнителя НЕ НАДО — (подумаешь, лишний проход при проверке...)
2.3.2) Сохраняется MIGX Исполнителя
3) Всё
Т.е. всё просто…
Большая просьба накидать ссылок по пунктам и подпунктам 1 и 2 — попробую собрать всё воедино
Пример брал отсюда https://modx.pro/help/6558
Несколько замечаний:
1. Лишняя строка
В плагине id текущего ресурса уже содержится в переменной $id.
2. Если ты хочешь выводить сохранённые новые данные в админке посредством MIGX, то надо бы исходную структуру JSON сохранить, а не полностью его переписывать (если я не ошибаюсь).
3. И я бы сделал проверку на получение объектов.
4. И если у Исполнителя есть такой Заказ, то можно просто пропустить итерацию цикла.