Личный кабинет веб пользователя MODx Evo
- Дополнения
- ModxAccount
Личный кабинет веб пользователя MODx Evo
Установка
Создётся сниппет account с кодом
<?php require MODX_BASE_PATH.'assets/snippets/account/snippet.account.php'; ?>
Создаётся документ "Личный кабинет" -> псевдоним -> account
Далее в нём дочерние ресурсы
Регистрация -> register
Профиль -> profile
Восстановление пароля -> forgot
и на каждой странице ставится вызов сниппета
account
[!account? &controller=`account` &controllerRegister=`account/register` &controllerLogin=`account` &controllerForgot=`account/forgot` &controllerProfile=`account/profile` &success=`` &userGroupId=`` !]
register
[!account? &controller=`account/register` &controllerRegister=`account/register` &controllerLogin=`account` &controllerForgot=`account/forgot` &controllerProfile=`account/profile` &success=`` &userGroupId=`` !]
profile
[!account? &controller=`account/profile` &controllerRegister=`account/register` &controllerLogin=`account` &controllerForgot=`account/forgot` &controllerProfile=`account/profile` &success=`` &userGroupId=`` !]
forgot
[!account? &controller=`account/forgot` &controllerRegister=`account/register` &controllerLogin=`account` &controllerForgot=`account/forgot` &controllerProfile=`account/profile` &success=`` &userGroupId=`` !]
Вместо псевдонимов контроллеров &controller..., можно поставить id страниц на которых расположен тот или иной вызов сниппета.
&success - перенаправление после удачного действия сниппета.
&userGroupId - id групп, через запятую для нового зарегистрированного пользователя.
При создании вложенности документов, как указанно выше и используя вложенные URL, вызов сниппета можно сократить до одной строчки
[!account?&userGroupId=``!]
либо использовать свои шаблоны
[!account? &tpl=`@FILE:assets/snippets/account/view/register.tpl.txt` &userGroupId=`` !]
AJAX
Для работы через ajax используется ModxLoader - ModxLoader
Капча
Используется эта ModxCaptcha
Пример использования
<img src="assets/captcha" alt="captcha" width="120px" height="60px"/>
либо создать сниппет captcha и вывести его на отдельной странице с шаблоном blank и типом text/plain
<?php $chars = !empty($modx->config['captcha_words']) ? preg_replace('![^\w\d]*!', '', $modx->config['captcha_words']) : '1234567890'; $chars = substr(str_shuffle($chars), 0, 5); if(isset($_REQUEST['key'])) { $_SESSION['veriword_' . md5($_REQUEST['key'])] = $chars; } else { $_SESSION['veriword'] = $chars; } header("Pragma: no-cache"); header("Content-Type:image/png"); $img = imagecreate(210, 100); imagecolorallocatealpha($img, 255, 255, 255, 127); $color = imagecolorallocate($img, 0, 0, 0); $x = 10; for($i = 0; $i < strlen($chars); $i++) { $letter = mb_substr($chars, $i, 1, 'UTF-8'); imagettftext($img, 70, rand(-10, 10), $x, 75, $color, MODX_MANAGER_PATH . "includes/ttf/ftb_____.ttf", $letter); $x += 35; } imagepng($img); imagedestroy($img); ?>
Ветка обсуждения сниппета на форуме modx.im
Примеры использование
Регистрация
Например поле Адрес, вместо того чтобы предложить юзеру записать весь адрес одной строчкой, можно поставить поля для каждого значения.
далее эти данные запишутся в базу в виде json строки.
Уровень вложенности можно использовать любой, но разумнее дальше 3-4 ого не залезать.
Шаблоны
Шаблоны для формы в html со вставками php кода, можно использовать php сразу в шаблоне, либо все теги modx.
<? if($error_email) { ?><?= $error_email ?><? } ?>
либо использовать чанки, подключив их в &tpl=`ваш чанк`
<@IF:[+error_email+]>[+error_email+]<@ENDIF> <@IF:[+error_custom_field.address.street+]>[+error_custom_field.address.street+]<@ENDIF>