Просмотр категорий пользователя

Метод 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();

}

Внешний вид страницы категорий:

Просмотр категорий пользователя - student2.ru

Рисунок 16

либо, если это категории текущего пользователя:

Просмотр категорий пользователя - student2.ru

Рисунок 17

Добавление новой категории

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

Просмотр категорий пользователя - student2.ru

Рисунок 18

и сообщение:

Просмотр категорий пользователя - student2.ru

Код обработчика добавления категории:

/**

* Добавление новой категории

*/

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

Просмотр категорий пользователя - student2.ru

Рисунок 19

и, если обновление произошло успешно:

Просмотр категорий пользователя - student2.ru

Удаление категории

Удаление категории производится методом delete, в который передается номер удаляемой категории. Для удаления необходимо перейти по соответствующей ссылке:

Просмотр категорий пользователя - student2.ru

Рисунок 20

Обработчик удаления проверяет авторство категории, е, если текущий пользователь является автором удаляемой категории, то удаляет ее:

Просмотр категорий пользователя - student2.ru

Листинг удаления категории:

/**

* Удаление категории

*/

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

Просмотр категорий пользователя - student2.ru

Рисунок 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;

}

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