Дополнительные данные в БД при регистации или активации пользователя

Тема в разделе "Программирование", создана пользователем DKraev, 08.05.2013.

  1. DKraev
    Offline

    DKraev <i>(aka gft)</i> => Cпециалист <=

    Регистрация:
    16.08.2008
    Сообщения:
    1 627
    Симпатии:
    219
    Пол:
    Мужской
    Приветствую, дамы и господа )

    Хотел бы посоветоваться, как лучше организовать следующий функционал.

    Есть ADSManager. Дописаны коммерческие функции к ней. Создана дополнительная таблица adsmanager_balances, где хранится текущий баланс пользователей.

    При регистрации пользователя необходимо зачислять на баланс определенную сумму. Следовательно, мне нужно добавить дополнительный запрос при регистрации пользователя (а ещё лучше - при активации), который вставит id пользователя и его бонус в adsmanager_balances

    Желательно сделать это без внесения изменений в ядро, естественно. Вот не знаю, как лучше сделать... Предложите варианты, чтобы мозги сдвинуть с мертвой точки.

    Может при первой авторизации пользователя записывать данные в adsmanager_balances? Или все таки лучше делать именно при регистрации зачисление?
     
  2.  
  3. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 206
    Симпатии:
    334
    Пол:
    Мужской
    есть же система активации?
    та вот и используй её, допиши (в используемый при активации файл) несколько строк которые будут добавлять N-ое число (сумму) в таблицу adsmanager_balances
    конечно же это должно быть в контроле используемой для активации ссылки

    два раза всё равно активировать не получится, а значит и не получится пополнить два раза баланс;)
     
  4. DKraev
    Offline

    DKraev <i>(aka gft)</i> => Cпециалист <=

    Регистрация:
    16.08.2008
    Сообщения:
    1 627
    Симпатии:
    219
    Пол:
    Мужской
    Да, активацию смотрел. Но для реализации посредством активации требуются изменения в ядре системы = возможность обновления

    Или можно придумать что-то, что позволит реализовать пополнение баланса при активации без изменения ядра?
     
  5. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 206
    Симпатии:
    334
    Пол:
    Мужской
    тогда только системный плагин
    если в ядре есть какой либо специфический триггер то повесить на него исполнение этого плагин
    если нет специфического триггера то вешать на любой какой есть, но с внедрением одной строки с переменной обозначающей активацию, которая в последствии обработается плагином
    если и такого нет, тогда опять же создать свой триггер. активировать его и выполнить плагин или просто сделать requere_once файла который выполнить все необходимые действия, если обновление затрёт эту строку то добавить её заново вручную

    почему именно вручную?
    потому что неизвестно как будет выглядеть код после обновления и в какое именно место надо будет добавлять requere_once, а так вомжно было бы добавить строку в index.php (в корне) которая бы контролировала изменение в файле adsmanager в котором до этого была внесена requere_once и если её бы там не было найдено то она бы вновь добавлялась

    ещё вариант - дополнить index.php в корне сайта запросом sql в котором будет отслеживаться появление новых записей в твоей таблице и при появлении оных внесение в балансную таблицу необходимых средств

    P.S. ни разу не работал с ADSManager по этому не знаю в каком именно месте и что писать, но действовал бы именно по выше приведённой логике
    P.P.S. и кстати в ядре какой системы? J или ADS?
     
    DKraev нравится это.
  6. DKraev
    Offline

    DKraev <i>(aka gft)</i> => Cпециалист <=

    Регистрация:
    16.08.2008
    Сообщения:
    1 627
    Симпатии:
    219
    Пол:
    Мужской
    woojin, красавчик, спасибо. Умеешь подтолкнуть мозги в нужном направлении.

    Системный плагин, конечно же. Простейшее решение, а вот я не допёр.

    В общем, согласно документации (http://docs.joomla.org/Plugin) у нас в распоряжении имеются всевозможные события, которые можно использовать для своих нужд.

    Я использовал onUserAfterSave - для добавления информации в свою таблицу при регистрации пользователя и onUserAfterDelete - для удаления этих данных в случае, если пользователь удален.

    Код плагина у меня получился таким:

    Код (PHP):
    1. <?php
    2. // Запрет прямого доступа.
    3. defined('_JEXEC') or die;
    4.  
    5. class plgSystemBalans extends JPlugin
    6. {
    7.     function onUserAfterSave($user, $isnew, $success, $msg)
    8.     {
    9.         $db = &JFactory::getDBO();
    10.         $sql = "INSERT INTO `#__adsmanager_balances` (`id`,`sum`, `date`)
    11.                     VALUES('".$user['id']."', '".$this->params->get('balans')."', '".$user['registerDate']."');";
    12.         $db->setQuery($sql);
    13.         $db->query();
    14.     }
    15.    
    16.     function onUserAfterDelete($user, $success, $msg)
    17.     {
    18.         $db = &JFactory::getDBO();
    19.         $sql = "DELETE FROM `#__adsmanager_balances` WHERE id='".$user['id']."'";
    20.         $db->setQuery($sql);
    21.         $db->query();
    22.     }
    23.    
    24. }
    25.  
    26. ?>
     
  7. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 206
    Симпатии:
    334
    Пол:
    Мужской
    было бы за что))))
     

Поделиться этой страницей

Загрузка...