
- •Хранилище фотоальбомов
- •Введение
- •Постановка задачи
- •Описание инструментов субд
- •Язык программирования
- •Структура базы данных Диаграмма
- •Описание таблиц
- •Структура web-приложения Определение основных страниц
- •Определение реализации страниц
- •Контроллеры
- •Просмотр списка пользователей
- •Просмотр профиля пользователя
- •Вход пользователя в систему
- •Выход пользователя из системы
- •Регистрация нового пользователя
- •Редактирование профиля
- •Удаление профиля
- •Восстановление пароля
- •Категории
- •Просмотр категорий пользователя
- •Добавление новой категории
- •Редактирование категории
- •Удаление категории
- •Альбомы
- •Вывод списка альбомов
- •Отображение списка альбомов в категории
- •Отображение альбомов конкретного пользователя
- •Добавление альбома
- •Изменение альбома
- •Удаление альбома
- •Фотографии
- •Вывод списка фотографий
- •Вывод списка фотографий в альбоме
- •Вывод списка фотографий пользователя
- •Просмотр фотографии
- •Добавление фотографии
- •Редактирование фотографии
- •Удаление фотографии
- •Поиск фотографии
- •Комментарии
- •Добавление комментариев
- •Просмотр комментариев
- •Оценивание фотографии
- •Просмотр средней оценки
- •Просмотр друзей пользователя
- •Добавление в друзья
- •Запросы в мои друзья
- •Принятие заявки
- •Отклонение заявки
- •Просмотр отправленных мной заявок
- •Удаление пользователя из списка друзей
- •Сообщения
- •Отправка сообщения
- •Просмотр списка диалогов
- •Просмотр диалога
- •Заключение
Удаление альбома
Удаление альбома осуществляется методом delete контроллера albums. Он принимает идентификатор альбома, проверяет авторство и удаляет альбом из базы данных.
Рисунок 27
После удачного удаления система выдает сообщение:
иначе, если пользователь пытается удалить не свой альбом:
Листинг обработчика удаления альбома выглядит так:
/**
* Удаление альбома
*/
public function delete( $album_id )
{
...
$album = $this->albums_model->get_album( $album_id );
if ( !$album )
{
$this->setError(
"Альбом с номером $album_id не найден",
"albums/user/" . $this->user['id']
);
}
if ( $this->user['id'] != $album['user_id'] )
{
$this->setError(
"Вы не можете удалять чужие альбомы",
"albums/user/" . $this->user['id']
);
}
if ( $this->db_model->delete(ALBUMS_TABLE, array('id' => $album_id)) )
{
$this->setMessage("Альбом <b>{$album['title']}</b> удален");
}
else
{
$this->setMessage("Альбом <b>{$album['title']}</b> не удален");
}
redirect("albums/user/" . $this->user['id']);
}
Фотографии
Фотографии загружаются пользователями в созданные ими альбомы. Для управления фотографиями используется контроллер photos и модель photos_model. В пределах управления фотографиями определены следующие действия:
Действие |
Метод |
Вывод списка фотографий |
index |
Вывод списка фотографий в альбоме |
album |
Вывод списка фотографий пользователя |
user |
Просмотр фотографии |
photo |
Добавление фотографии |
add |
Редактирование фотографии |
edit |
Удаление фотографии |
delete |
Поиск фотографии |
search |
В итоге структура контроллера photos будет следующей:
<?php
class Photos extends MY_Controller
{
/**
* Количество фотографий на странице
*/
private $_photos_per_page = 2;
/**
* Количество комментариев на странице
*/
private $_comments_per_page = 3;
public function __construct()
{
parent::__construct();
}
/**
* Вывод списка фотографий
*/
public function index( $page = 1 ) {}
/**
* Вывод списка фотографий в альбоме
*/
public function album( $album_id, $page = 1 ) {}
/**
* Вывод списка фотографий пользователя
*/
public function user( $user_id, $page = 1 ) {}
/**
* Просмотр фотографии
*/
public function photo( $photo_id, $page = 1 ) {}
/**
* Добавление фотографии
*/
public function add( $album_id = null ) {}
/**
* Редактирование фотографии
*/
public function edit( $photo_id ) {}
/**
* Удаление фотографии
*/
public function delete( $photo_id ) {}
/**
* Поиск фотографии
*/
public function search() {}
}
Вывод списка фотографий
Метод index контроллера photos играет роль главной страницы. Он выводит все фотографии, имеющиеся на сайте постранично. Для этого используется метод get_photos модели photos_model, листинг которого представлен ниже:
/**
* Получение списка фотографий
*/
public function get_photos( $where = array(), $limit = 1000, $offset = 0 )
{
$photos = PHOTOS_TABLE;
$albums = ALBUMS_TABLE;
$users = USERS_TABLE;
$categories = CATEGORIES_TABLE;
$this->db
->select(" P.*,
U.name AS user_name,
A.title AS album_title,
C.id AS category_id,
C.title AS category_title")
->from("$photos P")
->join("$users U", "P.user_id = U.id")
->join("$albums A", "P.album_id = A.id")
->join("$categories C", "A.category_id = C.id")
->having($where)
->order_by("P.title")
->limit($limit, $offset);
$res = $this->db->get();
return $res->result_array();
}
Данный запрос выбирает информацию о фотографиях и возвращает их в виде таблицы, которая впоследствии передается в отображение. Внешний вид главной страницы:
Рисунок 28
Количество фотографий, отображаемых на странице, определено в свойстве $_photos_per_page.