Как расширить класс modx?

Добрый вечер. Прошу подсказать, как расширить классы на работу со своими таблицами?Самый простой пример. Пользователи. Я хочу расширить возможности хранения данных, и допустим добавить одно новое поле для хранения в базе. В бд создаю таблицу modx_ext_users, который содержит в себе всего 3 поля: id, user_id, data
Как расширить обьект modUser, чтобы можно было Использовать такие конструкции:

$user = $modx->getObject('modUser',1);
    $data =  $user->get('pagetitle');
Или

$user = $modx->newObject('modUser');
    $user->set('data','Hello world!');
    $user->save();
Благодаря заметке Ильи я наконец научился из сниппетов работать со своими собственными таблицами через xPDO, теперь хочется научиться расширять уже существующие классы…
Случайно наткнулся на UICMPGenerator, думал спасение, т.к там нашелся функционал расширения таблиц. Вроде бы он генерирует XML схему, да и все те же файлы, что и CMPGenerator но как с этим всем работать — не могу разобраться…
Подскажите пожалуйста, в каком направлении дальше идти. В голове каша от всей информации в сети.
Николай
27 апреля 2019, 21:09
modx.pro
1 250
0

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

Илья Уткин
27 апреля 2019, 21:13
+1
Вот была статейка на эту тему: modx.pro/howto/8889
    Николай
    28 апреля 2019, 09:44
    0
    Илья, к вам тот же вопрос, что я ниже задал Николаю. Возможно ли?
      Илья Уткин
      28 апреля 2019, 09:47
      0
      Возможно — смотри исходники minishop2 — там как раз цена и прочие поля товара хранятся в отдельной таблице.
    Николай
    28 апреля 2019, 01:15
    +1
    Вот таким простым плагином можно расширить практически любые таблицы MODX — modx.pro/solutions/7037

    Но это в бэке. На фронте админки нужно уже с Extjs копаться. Тут уже решения зависят от конкретного случая. Одно из них Илья выше привёл.
      Николай
      28 апреля 2019, 09:43
      0
      А можно ли расширить дополнительной таблицей в бд?
      Управление из manager данными не нужно, актуально управление только из сниппетов.
      Почему отдельная таблица? В MODx и так несколько десятков полей, и у меня еще столько же будет. Табличка будет огромная…

      Утопический пример. Мы когда создаем\редактируем ресурс, можем на лету добавлять данные из TV полей:

      $page = $modx->getObject('modResource', 1);
      $page->set('tv1', "tv_value1");
      $page->save();
      В этом случае обновятся данные из таблицы modx_site_content и добавится связная запись TV в базу в другую табличку.
        Николай
        28 апреля 2019, 14:16
        0
        Не, код выше не должен работать. Получаете объект класса modResource, и добавляете данные соответственно туда же, а не в modTemplateVarResource, где твшки хранятся. В общем, отдельная таблица — это отдельный класс, который за неё отвечает. Либо вы в существующие таблицы добавляете новые поля, и тогда работаете с привычными классами MODX. Либо создаёте свою таблицу, и тогда нужно проделать действия примерно как тут. То есть сгенерировать модель БД, создать классы описывающие логику, подключить всё это к MODX, т.к. он не в курсе о них. Вариантов как подключить свою таблицу не один. Можно хоть вручную скрипт написать. В конечном счёте, через MIGX, CMPGenerator, modExtra, или как-то ещё, генерация модели происходит с использованием родных методов MODX.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      6