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