Отображение списка альбомов в категории
За отображение альбомов согласно категории отвечает метод category. Он получает в качестве параметра номер категории и производит выборку из нее альбомов:
Рисунок 22
Боковая панель:
Рисунок 23
Листинг метода category:
/**
* Отображение списка альбомов в категории
*/
public function category( $category_id )
{
...
$category = $this->categories_model->get_category($category_id);
if ( !$category )
{
$this->setError(
"Категории с номером <b>$category_id</b> нет",
"albums"
);
}
...
$this->load->view('view', $this->data);
}
Отображение альбомов конкретного пользователя
Выборка и отображение альбомов пользователя производится в методе user. Он принимает номер пользователя, альбомы которого необходимо показать. Внешний вид страницы с альбомами пользователя:
Рисунок 24
Частичный листинг метода user:
/**
* Отображение альбомов конкретного пользователя
*/
public function user( $user_id )
{
...
$user = $this->users_model->get_user(array('id'=>$user_id));
if ( !$user )
{
$this->setError(
"Пользователя с таким номером нет",
"albums"
);
}
...
$this->load->view('view', $this->data);
}
Добавление альбома
Добавление альбома производится в методе add, который загружает форму добавления альбома и обрабатывает данные, которые с ней приходят.
Внешний вид формы добавления альбома:
Рисунок 25
В данном случае в выпадающем списке категорий находятся только категории текущего пользователя. Таким образом, при попытке добавления альбома не в свою категорию система выдаст ошибку:
иначе, если добавление успешно, то сообщение будет таким:
Обработка добавления будет иметь код:
/**
* Добавление альбома
*/
public function add( $category_id = null )
{
$categories = $this->categories_model->get_categories(
array("user_id" => $this->user['id'])
);
if ( !$categories )
{
$errors[] = "Невозможно создать альбом. " .
"Для начала добавьте хотя бы одну категорию";
$this->session->set_userdata('errors', $errors);
redirect("categories/add");
}
// Принимаем данные формы
if ( $this->input->post("submit") )
{
// Определяем правила проверки
// Устанавливаем правила
// Проверяем данные формы
if ( $this->form_validation->run() == true )
{
// Данные корректны, принимаем их
$category = $this->categories_model
->get_category($album['category_id']);
if ( !$category || ($this->user['id'] != $category['user_id']) )
{
$errors[] = "Невозможно добавить альбом в чужую категорию";
$this->session->set_userdata('errors', $errors);
redirect("categories/user/" . $this->user['id']);
}
// Заносим информацию в БД
}
}
// Загружаем форму добавления альбома
$this->load->view('view', $this->data);
}
Изменение альбома
Изменение альбома происходит в методе edit аналогично добавлению, за исключением того, что вместо добавления данных, пришедших из формы, производится их обновление. Форма изменения альбома имеет вид:
Рисунок 26
При удачном изменении система выдает сообщение:
Удаление альбома
Удаление альбома осуществляется методом 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() {}
}