Обновление MIGX ДРУГОГО тикета при сохранении документа

Добрый день!
Необходимо при сохранении Заказов обновить определённое поле MIGX в Исполнителях

Создал плагин на OnDocFormSave
При сохранении — бесконечное сохранение.
Что я делаю не так?

<?php
if ($modx->event->name=="OnDocFormSave") // Плагин срабатывает при сохранении ресурса
{    
    $id = $resource->get('id'); // Получаю id ресурса
    $parent = $resource->get('parent'); // Получаем id родителя

    if($parent!=2) //id раздела с тикетами Заказов =2, остальные не трогаю
    {
        return;
    }


    $migx = $modx->resource->getTVValue('vibce');
    $items = $modx->fromJSON($migx);

    foreach($items as $item) {

    $reskuda = $modx->getObject('modResource', $item['celovecus']);  // celovecus - id исполнителя
    $migxkuda=$reskuda->getTVValue('vibzak');
    $itemskuda = $modx->fromJSON($migxkuda);

        $naideno=0;
        $output = array();    
        foreach($itemskuda as $itemkuda) {
        $output[] = $itemkuda['zakazus'];

            if($itemkuda['zakazus']==$id)  // есть ли у исполнителя такой заказ
                {
                $naideno=1;
                }
        }
    
    if($naideno==0)     //  такого заказа нет
        {
            $itemkuda['zakazus'] = $id;
            $output[] = $itemkuda;
            $reskuda->setTVValue('vibzak', $modx->toJSON($output));
        }    

    }

}
Игорь
27 января 2020, 10:39
modx.pro
407
0

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

Наумов Алексей
27 января 2020, 11:30
0
Бесконечное сохранение — скорее всего ошибка 500 при выполнении php, см. логи modx и сервера.
Точно стоит добавить проверку на существование объекта $reskuda после его получения.
    Игорь
    28 января 2020, 13:58
    0
    Товарищи!
    ОЧЕНЬ большая просьба прояснить — почему MIGX не сохраняется?
    Я так понял — не требуется знания структуры JSON-файла ( $modx->fromJSON($migxkuda) и $modx->toJSON($output) всё сделают сами) и проверка существования полей в MIGX — что я делаю не так?
      Наумов Алексей
      28 января 2020, 16:33
      0
      Штааааа?
      Ну я вот написал, логи смотрели? Есть там что?
      Поэтапно пробовали отлаживать?
      Комментировать код блоками, найти строчку, где ошибка.
      У меня в голове нет встроенного интерпретатора, чтобы ваш код запустить и понять, с чего он вдруг не работает.
        Игорь
        29 января 2020, 11:45
        0
        Там всего одна значащая строка, и да, я просто НЕ ЗНАЮ, как работать с MIGX из php (MIGX создан в конфигураторе) — НАДО ЛИ предварительно формировать что-то ещё?

        $reskuda->setTVValue('vibzak', $modx->toJSON($output));

        В инете полно повторяющейся информации о том, как работать с MIGX из MODX (getImageList, this.render — я уже с этим разобрался, крутые вещи прямо в админке), ну вот ГДЕ взять ПОЛНУЮ информацию о MIGX?

        "У меня в голове нет встроенного интерпретатора, чтобы 
        ваш код запустить и понять, с чего он вдруг не работает."


        — я поэтому прошу выложить НЕБОЛЬШОЙ работающий пример
    Юрий
    27 января 2020, 13:29
    0
    Попробуй в конце кода вставить строку
    return;
      Игорь
      27 января 2020, 13:42
      0
      Думаю, что проблема не в этом — еще и MIGX Исполнителя не обновляется…
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      6