Как расширить класс modx?
Добрый вечер. Прошу подсказать, как расширить классы на работу со своими таблицами?Самый простой пример. Пользователи. Я хочу расширить возможности хранения данных, и допустим добавить одно новое поле для хранения в базе. В бд создаю таблицу modx_ext_users, который содержит в себе всего 3 поля: id, user_id, data
Как расширить обьект modUser, чтобы можно было Использовать такие конструкции:
Случайно наткнулся на UICMPGenerator, думал спасение, т.к там нашелся функционал расширения таблиц. Вроде бы он генерирует XML схему, да и все те же файлы, что и CMPGenerator но как с этим всем работать — не могу разобраться…
Подскажите пожалуйста, в каком направлении дальше идти. В голове каша от всей информации в сети.
Как расширить обьект 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 но как с этим всем работать — не могу разобраться…
Подскажите пожалуйста, в каком направлении дальше идти. В голове каша от всей информации в сети.
Комментарии: 6
Вот была статейка на эту тему: modx.pro/howto/8889
Илья, к вам тот же вопрос, что я ниже задал Николаю. Возможно ли?
Возможно — смотри исходники minishop2 — там как раз цена и прочие поля товара хранятся в отдельной таблице.
Вот таким простым плагином можно расширить практически любые таблицы MODX — modx.pro/solutions/7037
Но это в бэке. На фронте админки нужно уже с Extjs копаться. Тут уже решения зависят от конкретного случая. Одно из них Илья выше привёл.
Но это в бэке. На фронте админки нужно уже с Extjs копаться. Тут уже решения зависят от конкретного случая. Одно из них Илья выше привёл.
А можно ли расширить дополнительной таблицей в бд?
Управление из manager данными не нужно, актуально управление только из сниппетов.
Почему отдельная таблица? В MODx и так несколько десятков полей, и у меня еще столько же будет. Табличка будет огромная…
Утопический пример. Мы когда создаем\редактируем ресурс, можем на лету добавлять данные из TV полей:
Управление из manager данными не нужно, актуально управление только из сниппетов.
Почему отдельная таблица? В MODx и так несколько десятков полей, и у меня еще столько же будет. Табличка будет огромная…
Утопический пример. Мы когда создаем\редактируем ресурс, можем на лету добавлять данные из TV полей:
$page = $modx->getObject('modResource', 1);
$page->set('tv1', "tv_value1");
$page->save();
В этом случае обновятся данные из таблицы modx_site_content и добавится связная запись TV в базу в другую табличку.
Не, код выше не должен работать. Получаете объект класса modResource, и добавляете данные соответственно туда же, а не в modTemplateVarResource, где твшки хранятся. В общем, отдельная таблица — это отдельный класс, который за неё отвечает. Либо вы в существующие таблицы добавляете новые поля, и тогда работаете с привычными классами MODX. Либо создаёте свою таблицу, и тогда нужно проделать действия примерно как тут. То есть сгенерировать модель БД, создать классы описывающие логику, подключить всё это к MODX, т.к. он не в курсе о них. Вариантов как подключить свою таблицу не один. Можно хоть вручную скрипт написать. В конечном счёте, через MIGX, CMPGenerator, modExtra, или как-то ещё, генерация модели происходит с использованием родных методов MODX.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.