Сниппет для регистрации, входа, напоминания пароля и личного кабинета пользователя.
Создётся сниппет 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 - https://github.com/64j/ModxLoader
Используется эта https://github.com/64j/ModxCaptcha
либо создать сниппет 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