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>