Как можно при сохранении ресурса получить все его поля и записать обратно в них изменения?
Приветствую.
У меня есть скрипт в плагине админки MODX, который при сохранении ресурса ищет в нем строку «https://www.youtube.com/watch?v=...» по регулярному выражению и при ее нахождении запрашивает через API YouTube данные о видео, формирует шаблон для вывода видео и шаблон обратно в поле контента ресурса. Оно работает и это хорошо.
А еще у меня есть разные доп. поля и я хочу сделать так, чтобы этот плагин работал и с ними, но не пойму как написать такой чанк. Дело в том, что если бы дело касалось нескольких доп. полей, то я бы не заморачивался и прописал их вручную в плагине, но таких полей десятки и иногда они могут добавляться или удаляться и тогда придется постоянно модифицировать плагин.
Подскажите, пожалуйста, решение того, каким образом можно запросить все существующие у ресурса доп. поля, найти в них строку по регулярному выражению, при наличии такой строки что-то с ней сделать и записать изменения обратно в то же доп. поле.
У меня есть скрипт в плагине админки MODX, который при сохранении ресурса ищет в нем строку «https://www.youtube.com/watch?v=...» по регулярному выражению и при ее нахождении запрашивает через API YouTube данные о видео, формирует шаблон для вывода видео и шаблон обратно в поле контента ресурса. Оно работает и это хорошо.
А еще у меня есть разные доп. поля и я хочу сделать так, чтобы этот плагин работал и с ними, но не пойму как написать такой чанк. Дело в том, что если бы дело касалось нескольких доп. полей, то я бы не заморачивался и прописал их вручную в плагине, но таких полей десятки и иногда они могут добавляться или удаляться и тогда придется постоянно модифицировать плагин.
Подскажите, пожалуйста, решение того, каким образом можно запросить все существующие у ресурса доп. поля, найти в них строку по регулярному выражению, при наличии такой строки что-то с ней сделать и записать изменения обратно в то же доп. поле.
Комментарии: 5
Расскажу свой универсальный способ поиска ответа на подобные вопросы.
1. Пойти в core/model/schema или если нужно работать с компонентом то в core/components/packagename/model/schema там нахожу нужные классы и таблицы и смотрю с кем и как они связаны (один к одному, один ко многим и вообще без связей), какие поля доступны. Если надо иду в БД чтобы проверить какие значения где записаны.
2. Получаю коллекцию объектов с помощью методов $modx->newQuery() и $modx->getIterator().
3. Для записи используется метод set() и метод save() для сохранения объекта. Так же можно использовать метод fromArray() для записи массива данных в объект.
1. Пойти в core/model/schema или если нужно работать с компонентом то в core/components/packagename/model/schema там нахожу нужные классы и таблицы и смотрю с кем и как они связаны (один к одному, один ко многим и вообще без связей), какие поля доступны. Если надо иду в БД чтобы проверить какие значения где записаны.
2. Получаю коллекцию объектов с помощью методов $modx->newQuery() и $modx->getIterator().
3. Для записи используется метод set() и метод save() для сохранения объекта. Так же можно использовать метод fromArray() для записи массива данных в объект.
Для меня это сложно все.
Тогда будет правильнее обратиться за помощью в реализации. Так как с TV все достаточно запутано. На сайте есть соответствующий раздел.
Плагин ставишь на
OnBeforeDocFormSave
Можешь через $_REQUEST посмотреть все поля, TV начинаются с ['tv{тут номер}']
Если отдельно, то $resource->getTVValue('bio');
$resource->setTVValue(.., ...);
OnBeforeDocFormSave
Можешь через $_REQUEST посмотреть все поля, TV начинаются с ['tv{тут номер}']
Если отдельно, то $resource->getTVValue('bio');
$resource->setTVValue(.., ...);
Могли бы привести конкретный код/пример или ссылку на таковой?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.