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>
Mem: 3.5 mb, MySQL: 0.0026 s, 2 req., PHP: 0.0377 s, all: 0.0403 s, cache.