Сниппет для регистрации, входа, напоминания пароля и личного кабинета пользователя.
Создётся сниппет 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 используется 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>