Как можно при сохранении ресурса получить все его поля и записать обратно в них изменения?

Приветствую.

У меня есть скрипт в плагине админки MODX, который при сохранении ресурса ищет в нем строку «https://www.youtube.com/watch?v=...» по регулярному выражению и при ее нахождении запрашивает через API YouTube данные о видео, формирует шаблон для вывода видео и шаблон обратно в поле контента ресурса. Оно работает и это хорошо.

А еще у меня есть разные доп. поля и я хочу сделать так, чтобы этот плагин работал и с ними, но не пойму как написать такой чанк. Дело в том, что если бы дело касалось нескольких доп. полей, то я бы не заморачивался и прописал их вручную в плагине, но таких полей десятки и иногда они могут добавляться или удаляться и тогда придется постоянно модифицировать плагин.

Подскажите, пожалуйста, решение того, каким образом можно запросить все существующие у ресурса доп. поля, найти в них строку по регулярному выражению, при наличии такой строки что-то с ней сделать и записать изменения обратно в то же доп. поле.
weranda
14 июля 2022, 13:51
modx.pro
536
0

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

Артур Шевченко
14 июля 2022, 17:20
+1
Расскажу свой универсальный способ поиска ответа на подобные вопросы.
1. Пойти в core/model/schema или если нужно работать с компонентом то в core/components/packagename/model/schema там нахожу нужные классы и таблицы и смотрю с кем и как они связаны (один к одному, один ко многим и вообще без связей), какие поля доступны. Если надо иду в БД чтобы проверить какие значения где записаны.
2. Получаю коллекцию объектов с помощью методов $modx->newQuery() и $modx->getIterator().
3. Для записи используется метод set() и метод save() для сохранения объекта. Так же можно использовать метод fromArray() для записи массива данных в объект.
    weranda
    14 июля 2022, 17:25
    0
    Для меня это сложно все.
      Максим
      14 июля 2022, 21:04
      +1
      Тогда будет правильнее обратиться за помощью в реализации. Так как с TV все достаточно запутано. На сайте есть соответствующий раздел.
    Роман
    15 июля 2022, 11:20
    +1
    Плагин ставишь на
    OnBeforeDocFormSave
    Можешь через $_REQUEST посмотреть все поля, TV начинаются с ['tv{тут номер}']
    Если отдельно, то $resource->getTVValue('bio');

    $resource->setTVValue(.., ...);
      weranda
      16 июля 2022, 10:31
      0
      Могли бы привести конкретный код/пример или ссылку на таковой?
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5