1
0

Всем привет! Можете подсказать как реализовать добавление комментариев в курсе CodeIgniter (урок 8.2). Никак не получается реализовать. Где можно скачать ИТОГОВЫЙ исходный код к проекту Киномонстр, подскажите пожалуйста. 

Я только смог написать добавление комментариев при введений id к фильму (не знаю где автоматически взять эту переменную, чтобы не вводить), а также при добавлений комментария не могу перенапривать страницу обратно к сайту с описанием фильма.

movies/view/:

<?php endforeach ?>

          <form action="/movies/create" method = "post">        

   
            <div class="form-group">  
              <input type="text" class="form-control input-lg" placeholder="id Фильма" name="movie_id">
            </div>      
            <div class="form-group">  
              <textarea class="form-control" name="comment_text"></textarea> 
            </div>
            <button type="submit" class="btn btn-lg btn-warning pull-right">Отправить</button> 
          </form> 

movies/create:

<form action="/movies/create" method = "post">        

   
            <div class="form-group">  
              <input type="text" class="form-control input-lg" placeholder="id Фильма" name="movie_id">
            </div>      
            <div class="form-group">  
              <textarea class="form-control" name="comment_text"></textarea> 
            </div>
            <button type="submit" class="btn btn-lg btn-warning pull-right">Отправить</button> 
          </form> 

model/comments_model.php:

<?php

class Comments_model extends CI_Model {

    public function __construct() {
        $this->load->database();
    }

    public function getComments($movie_id, $limit) {
        $query = $this->db
            ->where('movie_id', $movie_id)
            ->limit($limit)
            ->get('comments');

        return $query->result_array();
    }

    public function setComments($user_id, $movie_id, $comment_text) {

        $data = array(
            'user_id' => $user_id,
            'movie_id' => $movie_id, 
            'comment_text' => $comment_text
        );

        return $this->db->insert('comments', $data);

    }
    
}

controller/movies:

<?php

defined('BASEPATH') OR exit('No direc script access allowed');

class Movies extends My_Controller {

    public function __constract() {
        parrent::__constract();
    }

    public function type($slug = NULL) {
        $this->load->library('pagination');

        $this->data['movie_data'] = null;
        
        $sorting = 'add_date';

        $offset = (int) $this->uri->segment(4);

        $row_count = 2;

        $count = 0;

        if ($slug == "films") {
            $count = count($this->films_model->getFilms(0, 1));
            $p_config['base_url'] = '/movies/type/films/';
            $this->data['title'] = "Фильмы";
            $this->data['movie_data'] = $this->films_model->getMoviesOnPage($sorting, $row_count, $offset, 1);
        }

        if ($slug == "serials") {
            $count = count($this->films_model->getFilms(0,2));
            $p_config['base_url'] = '/movies/type/serials/';
            $this->data['title'] = "Сериалы";
            $this->data['movie_data'] = $this->films_model->getMoviesOnPage($sorting, $row_count, $offset, 2);
        }

        if ($this->data['movie_data'] == null) {
            show_404();
        }

        //Pagination config
        $p_config['total_rows'] = $count;
        $p_config['per_page'] = $row_count;

        $p_config['full_tag_open'] = "<ul class='pagination'>";
        $p_config['full_tag_close'] ="</ul>";
        $p_config['num_tag_open'] = '<li>';
        $p_config['num_tag_close'] = '</li>';
        $p_config['cur_tag_open'] = "<li class='disabled'><li class='active'><a href='#'>";
        $p_config['cur_tag_close'] = "<span class='sr-only'></span></a></li>";
        $p_config['next_tag_open'] = "<li>";
        $p_config['next_tagl_close'] = "</li>";
        $p_config['prev_tag_open'] = "<li>";
        $p_config['prev_tagl_close'] = "</li>";
        $p_config['first_tag_open'] = "<li>";
        $p_config['first_tagl_close'] = "</li>";
        $p_config['last_tag_open'] = "<li>";
        $p_config['last_tagl_close'] = "</li>";


        //init pagination
        $this->pagination->initialize($p_config);

        $this->data['pagination'] = $this->pagination->create_links();

        $this->load->view('templates/header', $this->data);
        $this->load->view('movies/type', $this->data);
        $this->load->view('templates/footer');
    }

    public function view($slug = NULL) {

        $movie_slug = $this->films_model->getFilms($slug, false, false);

        if (empty($movie_slug)) {
            show_404();
        }

        $this->load->model('comments_model');
        $this->data['comments'] = $this->comments_model->getComments($movie_slug['id'], 100);

        $this->data['title'] = $movie_slug['name'];
        $this->data['year'] = $movie_slug['year'];
        $this->data['rating'] = $movie_slug['rating'];
        $this->data['descriptions_movie'] = $movie_slug['descriptions'];
        $this->data['producer'] = $movie_slug['producer'];
        $this->data['player_code'] = $movie_slug['player_code'];
        
        $this->load->view('templates/header', $this->data);
        $this->load->view('movies/view', $this->data);
        $this->load->view('templates/footer');
    }

    public function create() {

        // if (!$this->dx_auth->is_admin()) {
        //  show_404();
        //  // $this->load->helper('url_helper'); РЕДИКРЕКТ(перенос) на главную страницу
        //  // redirect('/', 'location');         РЕДИКРЕКТ(перенос) на главную страницу
        // }
        $this->load->model('comments_model');
        $this->load->helper('URL');

        if($this->input->post('comment_text')) {
            $user_id = 7;
            $movie_id = $this->input->post('movie_id');
            $comment_text = $this->input->post('comment_text');

            if($this->comments_model->setComments($user_id, $movie_id, $comment_text)) {
                
                                 redirect('/', 'location');
        //         $this->load->view('templates/header', $this->data);
        //         $this->load->view('movies/view', $this->data);
        //         $this->load->view('templates/footer');
        //     }
        // } else {
        //         $this->load->view('templates/header', $this->data);
        //         $this->load->view('movies/create', $this->data);
        //         $this->load->view('templates/footer');  
        }

    }

Кайнар Толеубаев
4 years ago






основная идея заключается в том чтобы взять ID фильма из таблицы movie и отобразить его на странице комментариев, user ID взять из библиотеки Auth

добиться отображения этих двух параметров на странице комментариев (код отображения id фильма можно взять из новостей) а user ID взять из библиотеки Auth, - те как при входе пользователя через логин внизу отображается Здравствуйте ... имя только не имя а id нужно, в auth есть такая функция

потом записать это все в таблицу comments (еще не сделал):

через форму - отображения userid  movies id скрыть в форме или добиться передачи через переменные. А поле comments_text стандартно через форму

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

student_NMN8Zizp
3 years ago

собственно код

student_NMN8Zizp
3 years ago

comments model  здесь забор id из табл movie, и функция вставки в таблицу comments  это мои добавки к тому что писали в уроке

public function getMovieId($slug = FALSE) {
		if ($slug === FALSE) {     
			$query = $this->db->get('movie');
			return $query->result_array();
			}*/
		$query = $this->db->get_where('movie', array('slug' => $slug)); 
		return $query->row_array();		
			
		}

public function insertComments($user_id, $movie_id, $comments_text){

		$date = array( // из полей php myadmin
			'user_id' => $user_id,
			'movie_id' => $movie_id, 
			'comments_text' => $comments_text 
			);

		return $this->db->insert('comments', $date);	

		}		
student_NMN8Zizp
3 years ago

в контроллере Movies модификация метода view: здесь юзер берется из библиотеки $user_id = $this->dx_auth->get_user_id();
а эта переменная $movie_id = $this->input->post('movie_id');  из пост формы но чтобы пользователь не увидел дать ей аттрибут hidden)) конечно можно передать эту переменную по другому если заморочиться)))

public function view($slug = NULL) {  /*функция вывода страницы просмотра фильмов в плеерее */




 	$movie_slug = $this->films_model->getFilms($slug, false, false);  /*два раза false чтобы не дублировать код тк 	в films_model есть $limit, $type = 1*/ /*здесь slug = NULL те если есть данные в бд выполняется код из films_model где в переменную query загоняется массив из бд поле slug итого в $movie_slug загоняется массив с обработкой в models
*/
 /*	if(empty($movie_slug)){
 		show_404();
 	}*/

 	$this->load->model('comments_model'); // подгружаем файл модели комментариев
 	$this->date['comments'] = $this->comments_model->getComments($movie_slug['id'], 100); //подгружаем в date метод с загруженной БД (вместо лимита 100)
 	
 	$this->date['allid'] = $this->comments_model->getMovieId($slug);
 	$this->date['move_id'] = $this->date['allid']['id'];

 	$this->date['title'] = $movie_slug['name']; 	 /*в закладке в браузере будет писаться название фильма*/
 	$this->date['year'] = $movie_slug['year']; 	 /*подгрузка данных года из бд*/
 	$this->date['rating'] = $movie_slug['rating']; 	 /*подгрузка данных рейтинга из бд*/
 	$this->date['descriptions_movie'] = $movie_slug['descriptions']; 	 /*подгрузка данных фильма из бд descriptions поле из бд*/
	$this->date['player_code'] = $movie_slug['player_code']; /*подгрузка ссылки на плеер из бд*/
	$this->date['rejis'] = $movie_slug['rej']; /*подгрузка режисера из бд поле 'rej'*/
	
	
 		// если есть данные в пост-форме 

 		if($this->input->post('movie_id') && $this->input->post('comments_text')) {

 			 if(!$this->dx_auth->is_logged_in()){
 			/*show_404();*/
 			$this->load->helper('url_helper');
 			
 			redirect('movies/attention', 'location');  
 		}
 		
 		// то в эти переменные $ и $ загружается их данные	эти переменные прописываются в модели в функц загрузки в поля БД
 			$user_id = $this->dx_auth->get_user_id();
 			$movie_id = $this->input->post('movie_id');
 			$comments_text = $this->input->post('comments_text');
 			
 		if($this->comments_model->insertComments($user_id, $movie_id, $comments_text)){
 			echo "Комментарий добавлен, вернитесь на предыдущую страницу";
 			$this->load->view('template/header', $this->date);
 			$this->load->view('movies/addcomments', $this->date);
 			$this->load->view('template/footer'); 
 		}
 

 		}
 			
 		  
 		else {
 	$this->load->view('template/header', $this->date);
	$this->load->view('movies/view', $this->date);
	$this->load->view('template/footer');
		}

	}
student_NMN8Zizp
3 years ago

в view.php форма ввода комментария: Здесь как я писал input id фильма скрывается хииденом))) но в него выводится id фильма из таблицы movie - value = "<?php echo $move_id;?>"  соответсвенно пост форма заполнилась автоматически

<form action="/movies/view/" method="post">   
           
            <div class="form-group">
             
             <input type="hidden" class="form-control input-lg"  name="movie_id" value = "<?php echo $move_id;?>"  placeholder=""></br> 
              <textarea  name="comments_text" class="form-control"></textarea>

            </div>
            <button class="btn btn-lg btn-warning pull-right">отправить</button>
          </form>


 

<!-- для теста -->
<?php echo $this->dx_auth->get_username(); ?></br>

<?php echo $move_id;?></br>

<?php echo $this->dx_auth->get_user_id(); ?>
student_NMN8Zizp
3 years ago

в роутере прописать это:

$route['movies/view'] = 'movies/view';
$route['movies/attention'] = 'movies/message'
student_NMN8Zizp
3 years ago

да в Movies в контроллере добавить функцию вывода страницы предупреждения чтобы пользователь залогинился при добавке комментария а так он не добавляется

	public function message (){
	$this->load->view('template/header', $this->date);
	$this->load->view('movies/attention', $this->date);
	$this->load->view('template/footer');

	}
student_NMN8Zizp
3 years ago

7 ответов