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>