Игорь

Игорь

С нами с 21 марта 2018; Место в рейтинге пользователей: #123
Игорь
06 февраля 2020, 16:51
0
я уже так пробовал — выводятся все записи, а не нужные по условиям…
Игорь
06 февраля 2020, 16:39
0
Меня вообще-то интересует (A and B) or (C and D) or (E and F and G) :)
ПОЧТИ все примеры в интернете — либо одно условие, либо два.
Игорь
29 января 2020, 11:45
0
Там всего одна значащая строка, и да, я просто НЕ ЗНАЮ, как работать с MIGX из php (MIGX создан в конфигураторе) — НАДО ЛИ предварительно формировать что-то ещё?

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

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

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


— я поэтому прошу выложить НЕБОЛЬШОЙ работающий пример
Игорь
28 января 2020, 13:58
0
Товарищи!
ОЧЕНЬ большая просьба прояснить — почему MIGX не сохраняется?
Я так понял — не требуется знания структуры JSON-файла ( $modx->fromJSON($migxkuda) и $modx->toJSON($output) всё сделают сами) и проверка существования полей в MIGX — что я делаю не так?
Игорь
27 января 2020, 13:42
0
Думаю, что проблема не в этом — еще и MIGX Исполнителя не обновляется…
Игорь
27 января 2020, 13:40
0
Код не работает (не обновляется MIGX Исполнителя) ПЛЮС бесконечное сохранение (говорят, что надо return; поставить...)
Игорь
26 января 2020, 21:07
0
Сделал первую версию (код ниже)
Игорь
26 января 2020, 17:39
0
Первая версия — хотелось бы узнать, правильно ли я делаю?

<?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));
        }    

    }

}
Пример брал отсюда https://modx.pro/help/6558
Игорь
26 января 2020, 11:36
0
Спасибо за ссылку.
Я так понял, что в тот момент, как я всё сделаю (как описано), мне придёт понимание, что нужно было всё делать иначе :)

Создается плагин на событие 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 — попробую собрать всё воедино
Игорь
25 января 2020, 20:29
0
Большая ПРОСЬБА показать небольшой пример — я такого никогда ещё не делал (перезаписать migx другого тикета при сохранении документа)

В плагине на событии сохранения ресурса
Игорь
25 января 2020, 19:54
0
Есть тикеты — Заказы
Заказу можно задать несколько исполнителей (из тикетов Исполнители) — вручную это делается только в этот момент времени и только в Заказах.

Есть тикеты — Исполнители
Можно ли реализовать автоматическое добавление заказа и ИСПОЛНИТЕЛЮ, чтобы не бегать по Исполнителям и вручную не добавлять им Заказы?

При сохранении Заказа (либо в момент добавления Исполнителя в Заказе) проверяется список Исполнителей и им, соответственно (по id тикета), заносятся id Заказов?

Честное слово, я где-то уже видел подобную реализацию (добавление данных в migx другого тикета при изменении) — но сейчас не могу найти страницу.
Игорь
25 января 2020, 15:04
0
А если предложить другой «костыль» для уменьшения запросов к заказам?

К примеру, в исполнителе добавить MIGX со списком заказов, в которых исполнитель участвовал или участвовал ранее (т.е. был назначен, а потом удалён — но это НЕ КРИТИЧНО).

Получается, потом можно просматривать не все заказы, а только те, в которых хотя бы раз назначался исполнителем.

Такое вот дублирование информации (про костыль я уже сказал — но это реально снизит нагрузку — НЕ ПРИДЁТСЯ просматривать все заказы).
Естественно, вручную добавлять — это… Я просто не представляю, как АВТОМАТИЧЕСКИ добавить заказ исполнителю (в MIGX), если в заказе он назначается исполнителем (тоже MIGX).
Игорь
24 января 2020, 21:03
0
Тему можно закрывать, спасибо…

При сохранении в introtext ОБЫЧНО записывается content, если introtext НЕ ЗАПОЛНЕН.

Осталось только объяснить клиенту о необходимости ОБЯЗАТЕЛЬНОГО заполнения поля introtext (т.е. если там ничего нет — что-то там всё равно будет — это покажется только при обновлении).
Игорь
24 января 2020, 16:04
0
[[+introtext]] — выводит «содержимое» content (почему взято в кавычки- объяснение чуть ниже)
Игорь
24 января 2020, 15:36
0
Можно увидеть хоть один пример с pdoResources, учитывая "с учётом того, что данные там в JSON формате"?
Ведь не просто так был создан снипет getImageList?
Игорь
24 января 2020, 15:31
0
Может, некая проблема с кешем?
При сохранении в introtext ОБЫЧНО записывается content, если introtext НЕ ЗАПОЛНЕН.

Т.е. при выводе как раз introtext ВСЁ ВРЕМЯ и выводится, только содержимое поля ПОЧЕМУ-ТО не показывается в админке при открытии тикета?
Игорь
24 января 2020, 14:35
0
код чистый, установка «продвинутым» способом — важные папки переименованы или перенесены в другое место
Игорь
24 января 2020, 14:33
0
Добавил
[[+introtext:ellipsis=`200`:striptags]]
— чтобы отсечь рисунки и видео из основного контента
Игорь
17 января 2020, 16:03
0
Чтобы два раза не ходить — как реализовать что-то типа смещения по датам?
&where=`["konpr >= now()+2 AND nacpr<=now()-1"]`
— не работает
Игорь
17 января 2020, 14:28
+1
ДА ЗАЧЕМ ЭТО????

Размещу здесь рабочий вариант
&where=`["konpr >= now() AND nacpr<=now()"]`
Предвижу некоторые проблемы с часовым поясом (скорее всего), но это не особо критично.
Если бы кто намекнул, что now() возвращает текущую дату…