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