Главная | Новости | Блог (rss) | Ответы | Учебник | Правила |
Вы здесь: ГлавнаяБлогДеньги, баллы и AUTH
Вход | Регистрация

Деньги, баллы и AUTH

Создали сайт с регистрацией пользователей. Добавили поле баллы. Пользователь зашел в систему и увидел свое количество баллов. Выполнил определенное действие и в базе количество балов увеличилось. А пользователю отображается старая информация. Почему?
Начну с теории.
Сразу после входа в систему пользователю создается сессия и в нее заносится информация о пользователе. Эта сессия ставится в куку и таскается по всем страницам сайта, куда бы не пошел пользователь. На основе сессии и выводится информация в переменных AUTH.
Для вывода логина пользователя в шаблоне нужно написать {AUTH[login]}. Уникальный идентификатор - {AUTH[id_user]}. Количество денег (кредитов, карма) - {AUTH[balance]}.
Представим, что автор сайта сделал с помощью событий увеличение баланса при клике на ссылку с помощью события. Т.е. он в базе данных увеличил значение поля balance. Но в переменной {AUTH[balance]} изменения не произойдут и пользователь будет видеть старое значение.
Это связано с тем, что событие изменения базы изменяет только базу, но не данные сессии пользователя.
Для изменения значение переменных типа {AUTH[balance]} есть функция для шаблонизатора setsession. Вызывается так <?function(setsession;название;значение)?>. Вместо "название" нужно написать "balance", а вместо "значение" - новое число. Вот пример: <?function({AUTH[balance]}=sum;{AUTH[balance]};1)?><?function(setsession;balance;{AUTH[balance]})?>. Именно так. Сначала прибавить, потом занести в сессию. То, что мы сначала увеличили на 1, изменит значение переменной доступное только на этой странице, а установка нового значения в сессию изменит значение при загрузки других страниц.
Так можно делать, но это не совсем правильно. Для работы с деньгами, баллами, кредитами и другими важными данными существует система транзакций.
Транзакция - это перевод "денег" с одного аккаунта на другой с занесением информации об этой операции. Представим нужно увеличить значение balance у пользователя id на 1. Тогда нужно вызвать функцию проведения транзакции от одного пользователя (чаще всего администратора или специального аккаунта) для id со значением 1 и комментарием. Сразу после вызова этой функции на специальном аккаунте упадет значение balance, у пользователя id увеличится, будет занесена информация об этом переводе и если действие совершалось пользователем, то у него увеличится значение в сессии.
Система транзакций работает по идентификаторам, а не по логинам пользователей.
Пример вызова <?function(trans;balance;1;{AUTH[id_user]};1;За клик)?>. Эта функция сделает всё, что нужно даже без вызова событий в структурах данных.
Но и здесь есть маленький нюанс. Если перевод был совершен системой или другим пользователем, когда наш пользователь вошел в систему, то значение {AUTH[balance]} не изменится.
Для обхода этого необходимо каждый раз при выводе баланса на экран считывать его значение из базы. Как это делается написано в предыдущей статье.
07 авг 2012г 08:34:10
Просмотров: 3830
← предыдущая
29 апр 2015г 16:17:00, Андрей
Здравствуйте пользователи конструктора Letnick.com! Предлагаю всем нам об единица на сайте http://let-info.ru Есть форум, на котором можно обсуждать создавать и помогать в работе с созданном сайтом на конструкторе. Есть большой выбор смайликов для ваших сайтов и многое другое! Присоединяйтесь!
09 апр 2014г 23:22:04, Андрей
Модуль Мерчанд. Сделал все по инструкции. Настроил webmoney как описано в магазине Бизнес матрица. Модули настроил как описано в помощи к модулям. При оплате выдаёт ошибку "продавец не дал разрешения на выполнение операции" Что делать? В чем причина??? Помогите кто знает в чем проблема..
14 фев 2013г 04:20:41, vpu-34.nl0.ru
Когда будут новые блоги по создани сайта ?
20 янв 2013г 01:46:57, vpu-34.nl0.ru
Не думаю что тебе понадобится ето.
19 авг 2012г 22:54:59, Антон
Это "<?function( {AUTH[balance]}=sum;{AUTH[balance]};1)?> <?function (setsession;balance;{AUTH[balance]})?>" необходимо вписать в шаблоне, в котором происходит событие, или в шаблоне отвечающем за вывод информации о пользователе?

Ваш комментарий
Имя *
E-mail
Сообщение *
Введите цифры * Цифры ?

Введите цифры с картинки без букв
 

О нас | Написать нам | Сообщить о правонарушении |

Создать свой сайт © Конструктор сайтов Letnick.com 2006-2017