Событие на сохранение объекта migx db

Всем привет!
Сделал отдельный раздел в админке (туториал jonybang.blogspot.com/2015/09/migx-db-modx.html), где пользователь может создавать список объектов с определенным набором полей, почти как у ресурса. есть поле alias, которое хранит как раз буквенный код объекта, по которому потом строится ссылка на этот объект. Вот только сейчас его приходится заполнять вручную.

Хочу сделать автоматическую транслитерацию при сохранении нового объекта или обновлении существующего в MIGX db.

Кто-то сталкивался с подобным? что для этого нужно сделать? По сути мне достаточно сделать как-то обработчик на событие обновления или создание нового объекта кастомного класса
Ilya Gureshidze
19 июня 2019, 16:51
modx.pro
1
951
0

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

Баха Волков
19 июня 2019, 17:41
+1
Я не смотрел как устроено в MIGXDB, но могу предполагать, что также через процессоры. Так что нужно создать 2 события, и в процессорах создания и обновления вызывать эти события, передавая им объект, ну и создать плагин для этих событий. Или прямо в процессорах эту логику написать
    Ilya Gureshidze
    20 июня 2019, 01:14
    0
    Все верно) Сделал. Если кому интересно, то вот что предпринял:
    1. Создал два события (по факту, даже одно нужно было) в меню системных событий. Имя не важно
    2. В core/components/myComponent создал папки elements/plugins и файл plugin.mycomponent.php (любое имя php файла)
    3. Создал плагин на созданное ранее событие и указал php файл выше как источник (нажал галочку Статический)
    4. В процессоре core/components/migx/processors/mgr/migxdb/update.php вызвал метод
    $modx->invokeEvent('myEvent',array('myObj' => $object));
    5. Получил в плагине объект myObj, получил alias и если он пустой, то получаем pagetitle у myObj, создаем новый объект класса modResource
    $generator = $modx->newObject('modResource'));
    и в поле alias у myObj вставляем
    $myObj->set('alias',$generator->cleanAlias($pagetitle));
    $myObj->save();
    родная транслитерация modx сработала!)
      Баха Волков
      20 июня 2019, 04:16
      0
      Мне кажется, что можно обойтись и без создания объекта, загрузив класс translit и использовать его методы, но опять же, не заглядывал (с телефона пишу)
        Денис
        20 июня 2019, 09:42
        +1
        $modx->filterPathSegment($pagetitle)
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    4