Налаштування 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 дні.







