
- •Хранилище фотоальбомов
- •Введение
- •Постановка задачи
- •Описание инструментов субд
- •Язык программирования
- •Структура базы данных Диаграмма
- •Описание таблиц
- •Структура web-приложения Определение основных страниц
- •Определение реализации страниц
- •Контроллеры
- •Просмотр списка пользователей
- •Просмотр профиля пользователя
- •Вход пользователя в систему
- •Выход пользователя из системы
- •Регистрация нового пользователя
- •Редактирование профиля
- •Удаление профиля
- •Восстановление пароля
- •Категории
- •Просмотр категорий пользователя
- •Добавление новой категории
- •Редактирование категории
- •Удаление категории
- •Альбомы
- •Вывод списка альбомов
- •Отображение списка альбомов в категории
- •Отображение альбомов конкретного пользователя
- •Добавление альбома
- •Изменение альбома
- •Удаление альбома
- •Фотографии
- •Вывод списка фотографий
- •Вывод списка фотографий в альбоме
- •Вывод списка фотографий пользователя
- •Просмотр фотографии
- •Добавление фотографии
- •Редактирование фотографии
- •Удаление фотографии
- •Поиск фотографии
- •Комментарии
- •Добавление комментариев
- •Просмотр комментариев
- •Оценивание фотографии
- •Просмотр средней оценки
- •Просмотр друзей пользователя
- •Добавление в друзья
- •Запросы в мои друзья
- •Принятие заявки
- •Отклонение заявки
- •Просмотр отправленных мной заявок
- •Удаление пользователя из списка друзей
- •Сообщения
- •Отправка сообщения
- •Просмотр списка диалогов
- •Просмотр диалога
- •Заключение
Поиск фотографии
На сайте определен поиск фотографии, как по названию самой фотографии, так и по названию альбома. Поиск осуществляется методом search модели photos_model, а загрузка результатов производится методом search контроллера photos, который имеет следующий листинг:
/**
* Поиск фотографии
*/
public function search()
{
$photos = array();
$q = "";
// Пинимаем строку поиска
if ( $this->input->post("submit") )
{
$q = $this->input->post("q");
if ( ! $q )
$this->setMessage("Введите строку поиска");
else
$photos = $this->photos_model->search($q);
}
// Загружаем вид
$this->load->view('view', $this->data);
}
Листинг метода search модели photos_model:
/**
* Поиск фотографии
*/
public function search( $q = "" )
{
$photos = PHOTOS_TABLE;
$albums = ALBUMS_TABLE;
$users = USERS_TABLE;
return $this->db
->select(" P.*,
U.name AS user_name,
A.title AS album_title")
->from("$photos P")
->join("$users U", "P.user_id = U.id")
->join("$albums A", "P.album_id = A.id")
->like("P.title", $q)
->or_like("A.title", $q)
->order_by("P.id DESC")
->get()
->result_array();
}
Внешний вид страницы поиска:
Рисунок 34
Комментарии
Комментарии - это мнения о фотографиях, оставляемые пользователями. В данном случае комментарии могут быть от зарегистрированных пользователей и от гостей. При оставлении комментария зарегистрированным пользователем, авторство комментария определяется полем user_id в таблице comments. Если пользователь не авторизован, то ему необходимо указать свой E-mail, чтобы добавить комментарий.
Комментарии управляются контроллером comments. Он предоставляет доступ к следующим действиям:
Действие |
Метод |
Добавление комментария |
add |
Контроллер имеет следующую структуру:
class Comments extends MY_Controller
{
public function __construct()
{
parent::__construct();
}
/**
* Добавление комментария
*/
public function add( $photo_id ) {}
}
Также модель comments_model содержит метод get_comments, который возвращает список комментариев в зависимости от условий:
/**
* Получение комментариев
*/
public function get_comments( $where = array(), $limit = 1000, $offset = 0 )
{
$users = USERS_TABLE;
$comments = COMMENTS_TABLE;
return $this->db
->select(" C.*,
U.name AS user_name")
->from("$comments C")
->join("$users U", "C.user_id = U.id", "LEFT")
->having($where)
->limit($limit, $offset)
->order_by("C.id DESC")
->get()
->result_array();
}
Добавление комментариев
Добавление комментариев осуществляется через форму добавления нового комментария, расположенную на странице просмотра информации о фотографии. Форма отсылает текст и, если нужно, E-mail в контроллер comments в метод add:
/**
* Добавление комментария
*/
public function add( $photo_id )
{
// Проверка существования фотографии
$photo = $this->photos_model->get_photo( $photo_id );
if ( ! $photo )
$this->setError("Фотографии с номером <b>$photo_id</b> нет", "photos");
if ( $this->input->post("submit") )
{
// Если пользователь авторизован
if ( $this->user )
$comment['user_id'] = $this->user['id'];
else
{
$comment['guest_email'] = $this->input->post("guest_email");
if ( $comment['guest_email'] == "" )
{
$this->setError(
"Пожалуйста, укажите свой E-mail",
"photos/photo/$photo_id"
);
}
}
$comment['photo_id'] = $photo_id;
$comment['text'] = $this->input->post("text");
$comment['date'] = date("Y-m-d H:i:s");
if ( $comment['text'] == "" )
$this->setError(
"Пожалуйста, введите текст комментария",
"photos/photo/$photo_id"
);
if ( $this->db_model->insert(COMMENTS_TABLE, $comment) )
$this->setMessage("Комментарий добавлен", "photos/photo/$photo_id");
else
$this->setError(
"Произошла ошибка при добавлении комментария",
"photos/photo/$photo_id"
);
}
}
Внешний вид формы добавления комментария:
Рисунок 35
Если добавление комментария произошло успешно, то система выдает сообщение:
Или, если пользователь-гость:
Рисунок 36