Просмотр категорий пользователя
Метод user принимает идентификатор пользователя, категории которого необходимо просмотреть. Затем согласно номеру пользователя выбираются категории, им созданные. Это осуществляется вызовом метода модели categories_model – get_categories:
/**
* Получение списка категорий
*/
public function get_categories( $where, $limit = 999, $offset = 0 )
{
$categories = CATEGORIES_TABLE;
$albums = ALBUMS_TABLE;
$this->db ->select(" C.id,
C.user_id,
C.title,
C.date,
COUNT( A.id ) AS count_of_albums")
->from("$categories C")
->join("$albums A", "A.category_id = C.id", "LEFT")
->group_by("C.id, C.user_id, C.title, C.date")
->having($where);
$res = $this->db->get();
return $res->result_array();
}
Внешний вид страницы категорий:
Рисунок 16
либо, если это категории текущего пользователя:
Рисунок 17
Добавление новой категории
За добавление категории отвечает метод add. Он загружает форму добавления и заносит запись в базу данных:
Рисунок 18
и сообщение:
Код обработчика добавления категории:
/**
* Добавление новой категории
*/
public function add()
{
// Принимаем данные формы
if ( $this->input->post("submit") )
{
// Определяем правила проверки
// Устанавливаем правила
// Проверяем данные формы
if ( $this->form_validation->run() == true )
{
// Данные корректны, принимаем их
$category['user_id']= $this->user['id'];
$category['title'] = $this->input->post('title');
$category['date'] = date('Y-m-d H:i:s');
if ( $id = $this->db_model->insert(CATEGORIES_TABLE, $category) )
{
$this->setMessage(
"Категория <b>{$category['title']}</b> успешно создана",
"albums/category/$id"
);
}
else
$this->setError("Произошла ошибка при добавлении категории");
}
}
// Загружаем вид
$this->load->view('view', $this->data);
}
Редактирование категории
Редактирование категории происходит в методе 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;
}