Настройка Office для личного кабинета на MODX
Office — Extra MODX для создания личных кабинетов пользователей: регистрация, вход, восстановление пароля, редактирование профиля, смена пароля. Работает через AJAX, без перезагрузки страницы.
Установка
Package Manager → Office → установить. Зависимости: pdoTools, Email.
Структура страниц
Личный кабинет (шаблон: lk-base)
├── Профиль (/profile/)
├── Настройки (/settings/)
├── История заказов (/orders/) [опционально]
└── Выход (/logout/)
Авторизация:
├── Вход (/login/)
└── Регистрация (/register/)
└── Восстановление пароля (/forgot-password/)
Форма входа
[[!OfficeAuth?
&loginTpl=`officeLoginForm`
&successTpl=`officeLoginSuccess`
&redirectTo=`42`
&loginContext=`web`
]]
Чанк officeLoginForm:
<form class="login-form" data-office="auth">
<div class="form-group">
<label for="username">Email</label>
<input type="email" id="username" name="username" required>
[[+fi.error.username:notempty=`<span class="error">[[+fi.error.username]]</span>`]]
</div>
<div class="form-group">
<label for="password">Пароль</label>
<input type="password" id="password" name="password" required>
</div>
<button type="submit">Войти</button>
<a href="/forgot-password/">Забыли пароль?</a>
</form>
Форма регистрации
[[!OfficeRegister?
&submitVar=`office-register`
&successTpl=`officeRegisterSuccess`
&activateTpl=`officeActivateEmail`
&activateSubject=`Подтверждение регистрации`
&groups=`Member`
&redirectTo=`42`
&validate=`username:email:required,password:required:minLength=^8^,password_confirm:password_confirm=^password^`
&placeholderPrefix=`of.`
]]
Форма редактирования профиля
[[!OfficeProfile?
&submitVar=`office-profile`
&successTpl=`officeProfileSuccess`
&placeholderPrefix=`of.`
]]
<form data-office="profile">
<input type="text" name="fullname" value="[[!+of.fullname]]" placeholder="Полное имя">
<input type="email" name="email" value="[[!+of.email]]" placeholder="Email" required>
<input type="text" name="phone" value="[[!+of.phone]]" placeholder="Телефон">
[[- Кастомные расширенные поля ]]
<input type="text" name="extended[company]" value="[[!+of.extended.company]]" placeholder="Компания">
<button type="submit">Сохранить</button>
</form>
Смена пароля
[[!OfficeChangePassword?
&validate=`password_old:required,password:required:minLength=^8^,password_confirm:password_confirm=^password^`
]]
Восстановление пароля
[[!OfficeForgotPassword?
&emailSubject=`Восстановление пароля`
&emailTpl=`officeForgotPasswordEmail`
&redirectTo=`reset-password`
]]
Проверка авторизации в шаблоне
[[- Показать разное содержимое для авторизованных / гостей ]]
[[!OfficeAuth?
&loginTpl=`@INLINE <a href="/login/" class="btn">Войти</a>`
&logoutTpl=`@INLINE Привет, [[+username]]! <a href="/logout/">Выйти</a>`
]]
[[- Редирект неавторизованных на страницу входа ]]
[[!OfficeCheck? &redirectTo=`login-page-id`]]
Кастомные поля профиля через Extended
MODX хранит расширенные данные пользователя в JSON в поле extended:
$user = $modx->getObject('modUser', $userId);
$profile = $user->getOne('Profile');
// Записать
$profile->set('extended', json_encode([
'company' => 'ACME Corp',
'inn' => '7700000000',
'vip' => true,
]));
$profile->save();
// Прочитать
$extended = json_decode($profile->get('extended'), true);
$company = $extended['company'] ?? '';
Сроки
Настройка личного кабинета (вход, регистрация, профиль, смена пароля) — 3–4 дня.







