Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПвБД_Курсовик_ОрищенкоТС.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
895.63 Кб
Скачать

Поиск фотографии

На сайте определен поиск фотографии, как по названию самой фотографии, так и по названию альбома. Поиск осуществляется методом search модели photos_model, а загрузка результатов производится методом search контроллера photos, который имеет следующий листинг:

/**

* Поиск фотографии

*/

public function search()

{

$photos = array();

$q = "";

// Пинимаем строку поиска

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

{

$q = $this->input->post("q");

if ( ! $q )

$this->setMessage("Введите строку поиска");

else

$photos = $this->photos_model->search($q);

}

// Загружаем вид

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

}

Листинг метода search модели photos_model:

/**

* Поиск фотографии

*/

public function search( $q = "" )

{

$photos = PHOTOS_TABLE;

$albums = ALBUMS_TABLE;

$users = USERS_TABLE;

return $this->db

->select(" P.*,

U.name AS user_name,

A.title AS album_title")

->from("$photos P")

->join("$users U", "P.user_id = U.id")

->join("$albums A", "P.album_id = A.id")

->like("P.title", $q)

->or_like("A.title", $q)

->order_by("P.id DESC")

->get()

->result_array();

}

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

Рисунок 34

Комментарии

Комментарии - это мнения о фотографиях, оставляемые пользователями. В данном случае комментарии могут быть от зарегистрированных пользователей и от гостей. При оставлении комментария зарегистрированным пользователем, авторство комментария определяется полем user_id в таблице comments. Если пользователь не авторизован, то ему необходимо указать свой E-mail, чтобы добавить комментарий.

Комментарии управляются контроллером comments. Он предоставляет доступ к следующим действиям:

Действие

Метод

Добавление комментария

add

Контроллер имеет следующую структуру:

class Comments extends MY_Controller

{

public function __construct()

{

parent::__construct();

}

/**

* Добавление комментария

*/

public function add( $photo_id ) {}

}

Также модель comments_model содержит метод get_comments, который возвращает список комментариев в зависимости от условий:

/**

* Получение комментариев

*/

public function get_comments( $where = array(), $limit = 1000, $offset = 0 )

{

$users = USERS_TABLE;

$comments = COMMENTS_TABLE;

return $this->db

->select(" C.*,

U.name AS user_name")

->from("$comments C")

->join("$users U", "C.user_id = U.id", "LEFT")

->having($where)

->limit($limit, $offset)

->order_by("C.id DESC")

->get()

->result_array();

}

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

Добавление комментариев осуществляется через форму добавления нового комментария, расположенную на странице просмотра информации о фотографии. Форма отсылает текст и, если нужно, E-mail в контроллер comments в метод add:

/**

* Добавление комментария

*/

public function add( $photo_id )

{

// Проверка существования фотографии

$photo = $this->photos_model->get_photo( $photo_id );

if ( ! $photo )

$this->setError("Фотографии с номером <b>$photo_id</b> нет", "photos");

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

{

// Если пользователь авторизован

if ( $this->user )

$comment['user_id'] = $this->user['id'];

else

{

$comment['guest_email'] = $this->input->post("guest_email");

if ( $comment['guest_email'] == "" )

{

$this->setError(

"Пожалуйста, укажите свой E-mail",

"photos/photo/$photo_id"

);

}

}

$comment['photo_id'] = $photo_id;

$comment['text'] = $this->input->post("text");

$comment['date'] = date("Y-m-d H:i:s");

if ( $comment['text'] == "" )

$this->setError(

"Пожалуйста, введите текст комментария",

"photos/photo/$photo_id"

);

if ( $this->db_model->insert(COMMENTS_TABLE, $comment) )

$this->setMessage("Комментарий добавлен", "photos/photo/$photo_id");

else

$this->setError(

"Произошла ошибка при добавлении комментария",

"photos/photo/$photo_id"

);

}

}

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

Рисунок 35

Если добавление комментария произошло успешно, то система выдает сообщение:

Или, если пользователь-гость:

Рисунок 36