
- •Хранилище фотоальбомов
- •Введение
- •Постановка задачи
- •Описание инструментов субд
- •Язык программирования
- •Структура базы данных Диаграмма
- •Описание таблиц
- •Структура web-приложения Определение основных страниц
- •Определение реализации страниц
- •Контроллеры
- •Просмотр списка пользователей
- •Просмотр профиля пользователя
- •Вход пользователя в систему
- •Выход пользователя из системы
- •Регистрация нового пользователя
- •Редактирование профиля
- •Удаление профиля
- •Восстановление пароля
- •Категории
- •Просмотр категорий пользователя
- •Добавление новой категории
- •Редактирование категории
- •Удаление категории
- •Альбомы
- •Вывод списка альбомов
- •Отображение списка альбомов в категории
- •Отображение альбомов конкретного пользователя
- •Добавление альбома
- •Изменение альбома
- •Удаление альбома
- •Фотографии
- •Вывод списка фотографий
- •Вывод списка фотографий в альбоме
- •Вывод списка фотографий пользователя
- •Просмотр фотографии
- •Добавление фотографии
- •Редактирование фотографии
- •Удаление фотографии
- •Поиск фотографии
- •Комментарии
- •Добавление комментариев
- •Просмотр комментариев
- •Оценивание фотографии
- •Просмотр средней оценки
- •Просмотр друзей пользователя
- •Добавление в друзья
- •Запросы в мои друзья
- •Принятие заявки
- •Отклонение заявки
- •Просмотр отправленных мной заявок
- •Удаление пользователя из списка друзей
- •Сообщения
- •Отправка сообщения
- •Просмотр списка диалогов
- •Просмотр диалога
- •Заключение
Просмотр списка пользователей
Просмотр списка пользователей контролирует метод index(), в который передается значение текущей страницы. Внешний вид страницы изображен на Рисунке 1:
Рисунок 1
Алгоритм вывода списка следующий:
Определение текущей страницы
Определение общего количества страниц с помощью значения свойства $_users_per_page
Корректирование значения полученной страницы
Выборка данных о пользователях согласно количеству отображаемых пользователей и смещению в выборке
Загрузка вида с полученными данными
Формируемые ссылки в списке имеют вид: /users/user/:id
Выборка происходит путем вызова метода модели users_model – get_users, который выполняет запрос к базе данных:
/**
* Получение списка пользователей
*/
public function get_users( $where, $limit = 0, $offset = 0 )
{
$this->db->where($where);
$this->db->limit($limit, $offset);
$this->db->order_by("name");
$q = $this->db->get(USERS_TABLE);
return $q->result_array();
}
Для обращения к базе данных используется библиотека Active Record, которая предоставляет удобный интерфейс для формирования запросов.
Просмотр профиля пользователя
Просмотр профиля отдельного пользователя происходит вызовом метода user с идентификатором пользователя. Внешний вид приведен на рисунке 2.
Рисунок 2
Полученное значение номера проверяется, производится выборка из таблицы users, и, если пользователь не найден, то выводится ошибка, например:
Рисунок 3
Также пользователь может быть заблокирован, тогда выводится следующая ошибка:
Рисунок 4
Метод модели get_user, возвращающий информацию о пользователе, имеет следующий код:
/*
* Получение информации о пользователе
*/
public function get_user( $where = array() )
{
$user = $this->db
->get_where(USERS_TABLE, $where)
->result_array();
return $user ? $user[0] : false;
}
В зависимости от роли клиента, боковая панель может быть трех видов:
Пользователь-гость |
Обычный пользователь |
Пользователь-владелец |
|
|
|
Вход пользователя в систему
Внешний вид страницы:
Рисунок 5
Вход пользователя контролируется методом login контроллера users:
/**
* Вход пользователя в систему
*/
public function login()
{
// Принимаем данные формы
if ( $this->input->post("submit") )
{
// Проверка введенных данных
}
// Загрузка вида
$this->load->view('view');
}
На этом этапе используется механизм валидации данных, реализованный в библиотеке Form Validation, алгоритм которой следующий:
Определение правил:
$config = array(
array(
'field' => 'email',
'label' => 'E-mail',
'rules' => 'required'
)
...
);
Инициализация класса Form Validation:
$this->form_validation->set_rules
$this->form_validation->set_rules($config);
Запуск механизма валидации:
// Проверяем данные формы
if ( $this->form_validation->run() == true )
{
...
}
Если валидация не прошла успешно, то в форму входа выводятся обнаруженные ошибки:
Рисунок 6
Либо, если ошибки не связаны с валидацией:
Рисунок 7
Идентификация пользователя в системе осуществляется путем использования сессий и cookies. При успешном входе в переменную сессии user_id устанавливается значение id пользователя в таблице users. При инициализации любого контроллера происходит считывание информации из базы данных в свойство user родительского контроллера, которое доступно из любой точки системы. Это хоть и влечет увеличение нагрузки на сервер, но также обеспечивает актуальность данных в пределах сеанса входа.
После удачного входа станет доступно пользовательское меню:
Рисунок 8