Отображение списка альбомов в категории

За отображение альбомов согласно категории отвечает метод category. Он получает в качестве параметра номер категории и производит выборку из нее альбомов:

Отображение списка альбомов в категории - student2.ru

Рисунок 22

Боковая панель:

Отображение списка альбомов в категории - student2.ru

Рисунок 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. Он принимает номер пользователя, альбомы которого необходимо показать. Внешний вид страницы с альбомами пользователя:

Отображение списка альбомов в категории - student2.ru

Рисунок 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, который загружает форму добавления альбома и обрабатывает данные, которые с ней приходят.

Внешний вид формы добавления альбома:

Отображение списка альбомов в категории - student2.ru

Рисунок 25

В данном случае в выпадающем списке категорий находятся только категории текущего пользователя. Таким образом, при попытке добавления альбома не в свою категорию система выдаст ошибку:

Отображение списка альбомов в категории - student2.ru

иначе, если добавление успешно, то сообщение будет таким:

Отображение списка альбомов в категории - student2.ru

Обработка добавления будет иметь код:

/**

* Добавление альбома

*/

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 аналогично добавлению, за исключением того, что вместо добавления данных, пришедших из формы, производится их обновление. Форма изменения альбома имеет вид:

Отображение списка альбомов в категории - student2.ru

Рисунок 26

При удачном изменении система выдает сообщение:

Отображение списка альбомов в категории - student2.ru

Удаление альбома

Удаление альбома осуществляется методом delete контроллера albums. Он принимает идентификатор альбома, проверяет авторство и удаляет альбом из базы данных.

Отображение списка альбомов в категории - student2.ru

Рисунок 27

После удачного удаления система выдает сообщение:

Отображение списка альбомов в категории - student2.ru

иначе, если пользователь пытается удалить не свой альбом:

Отображение списка альбомов в категории - student2.ru

Листинг обработчика удаления альбома выглядит так:

/**

* Удаление альбома

*/

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() {}

}

Наши рекомендации