Вывод списка фотографий пользователя

Вывод списка всех фотографий производится в методе 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);

}

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

Вывод списка фотографий пользователя - student2.ru

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

}

Внешний вид основного блока:

Вывод списка фотографий пользователя - student2.ru

Рисунок 32

На данной странице расположены ссылки на добавление комментариев и оценивание фотографии. Обработчики этих действий выходят за рамки контроллера photos, поэтому будут рассмотрены позже.

Также, если фотография не будет найдена, то система перенаправит пользователя по адресу /photos и выдаст следующую ошибку:

Вывод списка фотографий пользователя - student2.ru

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

Добавление новых фотографий осуществляет метод add контроллера photos. Он загружает форму загрузки фотографии и обрабатывает пришедший запрос. Вызвать метод можно из нескольких мест, различия лишь в том, будет ли установлен альбом, куда загружать фотографию или пользователь сам должен будет его выбрать из списка.

Частичный листинг метода add:

/**

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

*/

public function add( $album_id = null )

{

$albums = $this->albums_model->get_albums(

array("user_id" => $this->user['id'])

);

// Проверяем существование альбомов

if ( ! $albums )

{

$this->setError(

"Невозможно добавить фотографию. " .

"Для начала создайте хотя бы один альбом",

"albums/add"

);

}

...

// Принимаем данные формы

if ( $this->input->post("submit") )

{

// Определяем правила проверки

$config = array();

// Устанавливаем правила

// Проверяем данные формы

if ( $this->form_validation->run() == true )

{

// Пытаемся загрузить файл

// Создаем папки, если их еще нет

// Определяем критерии фотографии

$config = array(

"upload_path" => $dir

"encrypt_name" => "true"

...

);

// Загружаем

if ( $this->upload->do_upload() )

{

// Проверка на целостность

$album = $this->albums_model->get_album($photo['album_id']);

if ( ! $album || ($this->user['id'] != $album['user_id']) )

{

$this->setError(

"Загрузка фотографий в чужой альбом недопустима",

"photos/add"

);

}

// Формируем массив

$photo = array();

...

// Заносим информацию в БД

if ( $id = $this->db_model->insert(PHOTOS_TABLE, $photo) )

...

}

else

{

// Выводим ошибку загрузки

}

}

}

// Загружаем отображение

$this->load->view('view', $this->data);

}

Внешний вид формы загрузки:

Вывод списка фотографий пользователя - student2.ru

Рисунок 33

Ошибка при отсутствии категорий:

Вывод списка фотографий пользователя - student2.ru

Ошибка при отсутствии альбомов:

Вывод списка фотографий пользователя - student2.ru

Пример ошибки загрузки файла:

Вывод списка фотографий пользователя - student2.ru

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