Добавление комментариев
Добавление комментариев осуществляется через форму добавления нового комментария, расположенную на странице просмотра информации о фотографии. Форма отсылает текст и, если нужно, 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
Просмотр комментариев
Просмотр комментариев осуществляется на странице просмотра фотографии. Комментарии разбиты на страницы по значению, определенному в свойстве контроллера photos $_comments_per_page.
Внешний вид панели комментариев:
Рисунок 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;
}
Оценивание фотографии
Форма оценивания располагается на странице просмотра фотографии. Ее внешний вид:
Рисунок 38
После отправки формы система оповещает о результате: