
- •Хранилище фотоальбомов
- •Введение
- •Постановка задачи
- •Описание инструментов субд
- •Язык программирования
- •Структура базы данных Диаграмма
- •Описание таблиц
- •Структура web-приложения Определение основных страниц
- •Определение реализации страниц
- •Контроллеры
- •Просмотр списка пользователей
- •Просмотр профиля пользователя
- •Вход пользователя в систему
- •Выход пользователя из системы
- •Регистрация нового пользователя
- •Редактирование профиля
- •Удаление профиля
- •Восстановление пароля
- •Категории
- •Просмотр категорий пользователя
- •Добавление новой категории
- •Редактирование категории
- •Удаление категории
- •Альбомы
- •Вывод списка альбомов
- •Отображение списка альбомов в категории
- •Отображение альбомов конкретного пользователя
- •Добавление альбома
- •Изменение альбома
- •Удаление альбома
- •Фотографии
- •Вывод списка фотографий
- •Вывод списка фотографий в альбоме
- •Вывод списка фотографий пользователя
- •Просмотр фотографии
- •Добавление фотографии
- •Редактирование фотографии
- •Удаление фотографии
- •Поиск фотографии
- •Комментарии
- •Добавление комментариев
- •Просмотр комментариев
- •Оценивание фотографии
- •Просмотр средней оценки
- •Просмотр друзей пользователя
- •Добавление в друзья
- •Запросы в мои друзья
- •Принятие заявки
- •Отклонение заявки
- •Просмотр отправленных мной заявок
- •Удаление пользователя из списка друзей
- •Сообщения
- •Отправка сообщения
- •Просмотр списка диалогов
- •Просмотр диалога
- •Заключение
Вывод списка фотографий в альбоме
Фотографии также можно просматривать в пределах одного альбома. За отображения фотографий в альбоме отвечает метод album контроллера photos. Он имеет следующий листинг:
/**
* Вывод списка фотографий в альбоме
*/
public function album( $album_id, $page = 1 )
{
if ( ! is_numeric($album_id) )
{
$this->setError(
"Номер альбома не определен",
"albums"
);
}
$album = $this->albums_model->get_album($album_id);
if ( ! $album )
{
$this->setError(
"Альбома с таким номером нет",
"albums"
);
}
$user = $this->users_model->get_user(array('id' => $album['user_id']));
$category = $this->categories_model->get_category($album['category_id']);
$this->data['page_title'] = "Фотографии альбома {$album['title']}";
$this->data['photos'] = $this->photos_model->get_photos(
array('album_id'=>$album_id),
$this->_photos_per_page,
( $page - 1 ) * $this->_photos_per_page
);
...
$this->load->view('view', $this->data);
}
Внешний вид основного блока:
Рисунок 29
Внешний вид боковой панели:
Рисунок 30
Вывод списка фотографий пользователя
Вывод списка всех фотографий производится в методе user контроллера photos. Он принимает идентификатор пользователя и страницу для отображения списка постранично. Частичный листинг метода user:
/**
* Вывод списка фотографий пользователя
*/
public function user( $user_id, $page = 1 )
{
...
$user = $this->users_model->get_user(array('id'=>$user_id));
if ( !$user )
{
$this->setError(
"Пользователя с таким номером нет",
"photos"
);
}
...
// Обрабатываем страницу
$count_of_pages = $this->db_model->get_count_of_pages(
PHOTOS_TABLE,
array('user_id' => $user_id),
$this->_photos_per_page
);
// Выбираем фотографии
$this->data['photos'] = $this->photos_model->get_photos(
array("user_id" => $user_id),
$this->_photos_per_page,
( $page - 1 ) * $this->_photos_per_page
);
// Загружаем вид
$this->load->view('view', $this->data);
}
Вид основного блока практически аналогичен выводу по альбому:
Рисунок 31
Просмотр фотографии
Просмотр фотографии и комментариев к ней осуществляется на странице, формируемой методом photo контроллера photos.
Метод принимает два параметра: идентификатор фотографии и текущую страницу. Осуществляется проверка на существование запрашиваемой фотографии, и в зависимости от результата метод либо вызывает ошибку, либо загружает данные и само отображение.
Метод имеет следующий частичный листинг:
/**
* Просмотр фотографии
*/
public function photo( $photo_id, $page = 1 )
{
// Выборка фотографии
$photo = $this->photos_model->get_photo( $photo_id );
if ( ! $photo )
{
$this->setError(
"Фотографии с номером <b>$photo_id</b> нет",
"photos"
);
}
// Получаем оценку пользователя для данной фотографии
$mark = array();
if ( $this->user )
$mark = $this->marks_model->get_mark($photo_id);
// Обрабатываем страницу
...
// Формируем путь
$date = date_parse($photo['date']);
$photo_url = base_url() .
PHOTOS_DIR .
$date['year'] . "/" .
$date['month'] . "/" .
$date['day'] . "/" .
$photo['file_name'];
...
// Загружаем вид
$this->load->view('view', $this->data);
}
Внешний вид основного блока:
Рисунок 32
На данной странице расположены ссылки на добавление комментариев и оценивание фотографии. Обработчики этих действий выходят за рамки контроллера photos, поэтому будут рассмотрены позже.
Также, если фотография не будет найдена, то система перенаправит пользователя по адресу /photos и выдаст следующую ошибку: