
- •Хранилище фотоальбомов
- •Введение
- •Постановка задачи
- •Описание инструментов субд
- •Язык программирования
- •Структура базы данных Диаграмма
- •Описание таблиц
- •Структура web-приложения Определение основных страниц
- •Определение реализации страниц
- •Контроллеры
- •Просмотр списка пользователей
- •Просмотр профиля пользователя
- •Вход пользователя в систему
- •Выход пользователя из системы
- •Регистрация нового пользователя
- •Редактирование профиля
- •Удаление профиля
- •Восстановление пароля
- •Категории
- •Просмотр категорий пользователя
- •Добавление новой категории
- •Редактирование категории
- •Удаление категории
- •Альбомы
- •Вывод списка альбомов
- •Отображение списка альбомов в категории
- •Отображение альбомов конкретного пользователя
- •Добавление альбома
- •Изменение альбома
- •Удаление альбома
- •Фотографии
- •Вывод списка фотографий
- •Вывод списка фотографий в альбоме
- •Вывод списка фотографий пользователя
- •Просмотр фотографии
- •Добавление фотографии
- •Редактирование фотографии
- •Удаление фотографии
- •Поиск фотографии
- •Комментарии
- •Добавление комментариев
- •Просмотр комментариев
- •Оценивание фотографии
- •Просмотр средней оценки
- •Просмотр друзей пользователя
- •Добавление в друзья
- •Запросы в мои друзья
- •Принятие заявки
- •Отклонение заявки
- •Просмотр отправленных мной заявок
- •Удаление пользователя из списка друзей
- •Сообщения
- •Отправка сообщения
- •Просмотр списка диалогов
- •Просмотр диалога
- •Заключение
Редактирование категории
Редактирование категории происходит в методе edit и имеет аналогичную добавлению структуру, за исключением того, что данные после проверки не добавляются, а обновляются. Внешний вид редактирования категории:
Рисунок 19
и, если обновление произошло успешно:
Удаление категории
Удаление категории производится методом delete, в который передается номер удаляемой категории. Для удаления необходимо перейти по соответствующей ссылке:
Рисунок 20
Обработчик удаления проверяет авторство категории, е, если текущий пользователь является автором удаляемой категории, то удаляет ее:
Листинг удаления категории:
/**
* Удаление категории
*/
public function delete( $category_id )
{
$category = $this->categories_model->get_category($category_id);
if ( !$category )
{
$this->setError(
"Категория не найдена",
"categories/user/" . $this->user['id']
);
}
if ( $this->user['id'] != $category['user_id'] )
{
$this->setError(
"Вы не можете удалять чужие категории",
"categories/user/" . $this->user['id']
);
}
if ( $this->db_model->delete(CATEGORIES_TABLE, array('id'=>$category_id)) )
{
$this->setMessage(
"Категория <b>{$category['title']}</b> успешно удалена"
);
}
else
{
$this->setMessage(
"Категория <b>{$category['title']}</b> не удалена"
);
}
redirect("categories/user/" . $this->user['id']);
}
Альбомы
Альбомы по структуре приложения создаются пользователями в определенной категории. Поведение альбомов определяется контроллером albums, а запросы на выборку из БД описаны в модели albums_model. Контроллер определяет следующие действия:
Действие |
Метод |
Вывод списка альбомов |
index |
Отображение списка альбомов в категории |
category |
Отображение альбомов конкретного пользователя |
user |
Добавление альбома |
add |
Изменение альбома |
edit |
Удаление альбома |
delete |
Структура контроллера albums:
<?php
/**
* Контроллер альбомов
*/
class Albums extends MY_Controller
{
/**
* Количество альбомов на странице
*/
private $_albums_per_page = 10;
public function __construct()
{
parent::__construct();
}
/**
* Вывод списка альбомов
*/
public function index( $page = 1 ) {}
/**
* Отображение списка альбомов в категории
*/
public function category( $category_id ) {}
/**
* Отображение альбомов конкретного пользователя
*/
public function user( $user_id ) {}
/**
* Добавление альбома
*/
public function add( $category_id = null ) {}
/**
* Изменение альбома
*/
public function edit( $album_id ) {}
/**
* Удаление альбома
*/
public function delete( $album_id ) {}
}
Вывод списка альбомов
Вывод списка альбомов происходит через вызов метода index, который вызывается по умолчанию при переходе на страницу /albums. Он принимает страницу, и, исходя из ее значения, отображает постранично список альбомов всех пользователей:
Рисунок 21
Выборка производится методом get_albums в модели albums_model со следующим листингом:
public function get_albums( $where = array(), $limit = 999, $offset = 0 )
{
$albums = ALBUMS_TABLE;
$photos = PHOTOS_TABLE;
$categories = CATEGORIES_TABLE;
$res = $this->db
->select(" A.*,
C.title AS category_title,
COUNT(P.id) AS count_of_photos")
->from("$albums A")
->join("$categories C", "A.category_id = C.id", 'LEFT')
->join("$photos P", "P.album_id = A.id", 'LEFT')
->group_by("A.id")
->having($where)
->order_by("count_of_photos DESC")
->limit($limit, $offset)
->get()
->result_array();
return $res;
}