Начнем как и говорил ранее, с регистрации адвертов и авторизации их в админку.
Для этих целей за основу возьмем готовую либу UserLib – http://codeigniter.com/wiki/Userlib/ и обработаем ее напильником.
Распакуем скачанный файл в system\application\libraries\Userlib.php
Теперь подредактируем конфиг – system\application\config\config.php
$config[‘sess_use_database’] = TRUE; // хранить сессии в базе
и правим system\application\config\autoload.php, то что должно грузиться автоматом.
$autoload['libraries'] = array(‘database’, ‘session’, ‘Userlib’ );
Таблицу юзеров мы уже сделали в первой части. Сейчас сделаем таблицу для хранений сессий.
CREATE TABLE IF NOT EXISTS `ci_sessions` ( session_id varchar(40) DEFAULT '0' NOT NULL, ip_address varchar(16) DEFAULT '0' NOT NULL, user_agent varchar(50) NOT NULL, last_activity int(10) UNSIGNED DEFAULT 0 NOT NULL, user_data text NOT NULL, PRIMARY KEY (session_id) );
Если вдруг кому то, нужен конфирм регистраций юзера и мыла — можем использовать еще временную таблицу. Если со структуры не понятно, что делает тут эта таблица. Спрашиваем в комменты.
CREATE TABLE IF NOT EXISTS `guid` ( `idguid` smallint(6) NOT NULL AUTO_INCREMENT, `useridguid` smallint(6) NOT NULL, `textguid` varchar(32) DEFAULT NULL, PRIMARY KEY (`idguid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
И сейчас подработаем напильником UserLib, что скачали.
Нас интересуют 5 методов:
- register( $username, $password, $email, $status = ‘user’)
- login( $username, $password )
- logged_in( )
- forgot( $email, $length )
- logout()
Код приложен в конце поста, иначе читать, очень не удобно.
Теперь задача сделать формочки для ввода и логина и попробовать это в действии.
Создадим главный контроллер партнерки.
system\application\controllers\main.php отвечающий за вывод формы регистрации, логина и перехода в панель партнерки. Это пока единственный и главный файл, отвечающий за всю логику работы регистрации.
<?php class Main extends Controller { function Main() { parent::Controller(); $this->load->helper(array('url', 'form')); $this->load->library('form_validation'); } function index() { $this->load->view('main_view'); } function register() { $this->form_validation->set_rules('loginuser', 'Username', 'trim|required|min_length[5]|max_length[32]|xss_clean'); $this->form_validation->set_rules('passuser', 'Password', 'required|min_length[5]|max_length[32]|matches[passconf]'); $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required'); $this->form_validation->set_rules('emailuser', 'Email', 'trim|required|valid_email'); if ($this->form_validation->run() == false) { $this->load->view('main_register'); } else { $this->userlib->register($this->input->post('loginuser', true), $this->input-> post('passuser', true), $this->input->post('emailuser', true)); $this->load->view('main_succses.php'); } } function login() { $this->userlib->login($this->input->post('idlogin', true), $this->input-> post('idpassword', true)); $this->load->view('main_login.php'); } function logout() { $this->userlib->logout(); redirect('', 'refresh'); } }
И создадим сразу несколько шаблонов для этих форм.
system\application\views\main_view.php // для отображения стартовой страницы
system\application\views\main_login.php // для отображения формы логина
system\application\views\main_register.php // для отображения формы регистрации
system\application\views\main_succses.php // для успешной регистрации
system\application\views\main_fail.php // для ошибки при регистрации
system\application\views\main_usercp.php // для отображения юзерской части партнерки
Отредактируем system\application\config\routes.php, указав
$route['default_controller'] = «main»;
Форма регистрации и форма логина очень проста. Исходники как и говорил, найдете в конце статьи.
Чтобы не только поверить мне на слово, а проверить в работе то что мы сделали за минут 15, поднимите у себя на денвере сайт part.ru и распакуйте архив что приложен. Также залейте дамп и отредактируйте доступ к базе.
Конечно можно и нужно залить на другой домен, поправив соответствующие конфигурационные файлы, описанные в первой части.
А это свежая и правильная структура базы, ведь это все я пишу вместе с вами, рассказывая возможности фреймворка.
CREATE TABLE `ci_sessions` ( `session_id` varchar(40) NOT NULL DEFAULT '0', `ip_address` varchar(16) NOT NULL DEFAULT '0', `user_agent` varchar(50) NOT NULL, `last_activity` int(10) UNSIGNED NOT NULL DEFAULT '0', `user_data` text NOT NULL, PRIMARY KEY (`session_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(20) NOT NULL, `password` varchar(70) DEFAULT NULL, `email` varchar(50) NOT NULL, `ip` bigint(10) NOT NULL, `groupuser` enum('user','admin','banned','notactive') NOT NULL DEFAULT 'notactive', `balance` decimal(10,4) NOT NULL DEFAULT '0.0000', PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), UNIQUE KEY `username` (`username`) ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
Фух. Завтра ждите продолжения. Теперь я буду выкладывать только папку application – ее и надо будет заменять тем, что выше.
P.S. Разверните проект, поиграйтесь с кодом, поизучайте. Все очень предельно ясно и логично.
{ 11 comments… read them below or add one }
А я из авторизации юзаю обычно Freak Auth.
Возник вопрос насчет «подработаем напильником UserLib». Я подумал, что вы собираетесь изменять код библиотеки, но в примере приведен только код контроллера. Т.к. с я с UserLib не работал не понятно нужно ее дорабатывать или она нормально работает?
Ещё вопрос по поводу подтверждения по email. С базой все понятно, но, по-моему, в контроллер нужно добавить метод, который будет вызываться при переходе пользователя по ссылке подтверждения. Или в UserLib эта функция реализована иначе?
P.S. Очень интересное начало. Жду продолжения.
UserLib выложена в архиве, доработанная.
В подтверждением у меня сделано так, генерим guid, отправляем на мыло типа так
Ну и подтверждаем.
Они все не простые, а UserLib маленькая да удаленькая.
и где продолжение =) ?
Никто не просил его – я решил что не интересно.
В обще в совершенстве было бы не плохо если бы вы хотя бы комментарием написали бы – как оформить минимальную проверку на админа, типа админ или не админ.
Подсказали бы как подредактировать регистрацию, что бы IP писался полностью, и если был такой IP в базе то регистрация не разрешалась типа писалось ваш IP и вы уже зареганы
и почему у меня от IP тока 4 первых цифры пишется типа 1270 ? место 127.0.0.1 ?
Очень интересная серия статей. Очень был бы благодарен за продолжение!
ага, уже с пол года ждём (*
Продолжай.
А не могли бы вы написать скрипт партнёрской программы с оплатой за покупку товара!
Всё как таковое есть, а именно, ID уже присвоен, показывает общий баланс, не могу реализовать именно саму ччылку партнёрскую, чтоб потом при оплате, реферу шли проценты!! (((
Может кто подскажет как. . .
Leave a Comment