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

Добавление комментариев осуществляется через форму добавления нового комментария, расположенную на странице просмотра информации о фотографии. Форма отсылает текст и, если нужно, 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"

);

}

}

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

Добавление комментариев - student2.ru

Рисунок 35

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

Добавление комментариев - student2.ru

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

Добавление комментариев - student2.ru

Рисунок 36

Просмотр комментариев

Просмотр комментариев осуществляется на странице просмотра фотографии. Комментарии разбиты на страницы по значению, определенному в свойстве контроллера photos $_comments_per_page.

Внешний вид панели комментариев:

Добавление комментариев - student2.ru

Рисунок 37

Оценки

Каждая фотография может быть оценена пользователем по 5-тибальной шкале и притом единожды. За управление оценками отвечает контроллер marks и модель marks_model. В контроллере определены следующие действия:

Действие Метод
Оценить фотографию evaluate

Следовательно, структура контроллера marks будет следующей:

/**

* Контроллер оценок

*/

class Marks extends MY_Controller

{

public function __construct()

{

parent::__construct();

}

/**

* Оценивание фотографии

*/

public function evaluate( $photo_id ) {}

}

Также модель marks_model определяет следующие методы по выборке данных об оценках:

/**

* Получение средней оценки фотографии

*/

public function get_avg_mark( $photo_id )

{

$this->db->where("photo_id", $photo_id);

$this->db->select_avg('mark');

$res = $this->db->get(MARKS_TABLE);

$mark = $res->result_array();

return $mark[0]['mark'] ? $mark[0]['mark'] : 0;

}

/**

* Получение оценки пользователя

*/

public function get_mark( $photo_id, $user_id )

{

$where = array(

'user_id' => $user_id,

'photo_id' => $photo_id

);

$this->db->where($where);

$res = $this->db->get(MARKS_TABLE);

$mark = $res->result_array();

return $mark ? $mark[0] : 0;

}

Оценивание фотографии

Форма оценивания располагается на странице просмотра фотографии. Ее внешний вид:

Добавление комментариев - student2.ru

Рисунок 38

После отправки формы система оповещает о результате:

Добавление комментариев - student2.ru

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