Codeigniter Домашнее задание урока 19
В этом ДЗ надо создать страницу рейтинга фильмов.
Подскажите пожалуйста, что же я делаю не так?
1) В route создаю: $route['movies/rating'] = 'movies/rating';
2) Создаю саму страницу во views -> movies -> rating.php и переношу туда вёрстку BOOTSTRAP
3) В Контроллере Movies.php пишу :
public function rating(){
$this->data['title'] = "Рейтинг фильмов";
$this->load->view('templates/header', $this->data);
$this->load->view('movies/rating', $this->data);
$this->load->view('templates/footer');
}
В браузере выводит ошибку, где говорится что страница не найдена.
(Делал так в своём личном проекте, всё работает, а тут нет)
5 ответов
А в роутере $route['movies/rating'] = 'movies/rating'; перед есть запись типа $route['movies/(:any)'] = 'movies/view/$1';?
вроде последовательность влияет.
У меня так написано, правда в main контроллере экшн рейтинга лежит.
роутинг:
$route['movies'] = 'movies';
$route['movies/comment'] = 'movies/comment';
$route['movies/create'] = 'movies/create';
$route['movies/edit'] = 'movies/edit';
$route['movies/delete'] = 'movies/delete';
$route['movies/(:any)'] = 'movies/view/$1';
$route['movies/type/films'] = 'movies/type/films/$1';
$route['movies/type/serials'] = 'movies/type/serials/$1';
$route['rating'] = 'main/rating';
$route['rating/(:any)'] = 'main/rating/$1';
$route['contact'] = 'main/contact';
Метод контроллера для рейтинга фильмов в Main.php с пагинацией:
public function rating() {
$this->data['title'] = "Рейтинг фильмов";
$this->load->library('pagination'); //pagination
$offset = (int) $this->uri->segment(2); //pagination
$row_count = 5; //pagination
$count = count($this->Films_model->getMoviesOnPageByRating(0, 0)); //pagination
$p_config['base_url'] = '/rating/'; //pagination
$this->data['movie'] = $this->Films_model->getMoviesOnPageByRating($row_count, $offset); //pagination
//pagination config
$p_config['total_rows'] = $count;
$p_config['per_page'] = $row_count;
//pagination bootstrap
$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('main/rating', $this->data);
$this->load->view('templates/footer');
}
Просмотров у данного вопроса масса.
Если вдруг кому нужно,то в контроллере Movies добавляем функцию
public function table($slug = NULL) {
$this->load->library('pagination');
$this->data['movie_data'] = null;
$offset = (int) $this->uri->segment(4);
$row_count = 8; //кол-во на странице
$count = 0;
if($slug == "rating") {
$count = count($this->films_model->getFilms(false, 0, 1));
$p_config['base_url'] = '/movies/table/rating/';
$this->data['title'] = "Рейтинг фильмов";
$this->data['movie_data'] = $this->films_model->getMoviesOnPage($row_count, $offset, 1);
}
$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>";
$this->pagination->initialize($p_config);
$this->data['pagination'] = $this->pagination->create_links();
$this->load->view('templates/header', $this->data);
$this->load->view('movies/table', $this->data);
$this->load->view('templates/footer');
}
В папке views/movies создаем файл table.php и засовываем туда верстку rating
<h1><?php echo $title; ?></h1>
<hr>
<?php echo $pagination; ?>
<table class="table table-striped">
<thead>
<tr>
<th></th>
<th>Фильм</th>
<th class="text-center">Год</th>
<th class="text-center">Рейтинг</th>
</tr>
</thead>
<tbody>
<?php foreach ($movie_data as $key=>$value): ?>
<tr>
<td class="col-lg-1 col-md-1 col-xs-2">
<img class="img-responsive img-thumbnail" src="<?php echo $value['poster']; ?>" alt="<?php echo $value['poster']; ?>">
</td>
<td class="vert-align"><a href="/movies/view/<?php echo $value['slug']; ?>/"><?php echo $value['name']; ?></a></td>
<td class="text-center vert-align"><?php echo $value['year']; ?></td>
<td class="text-center vert-align"><span class="badge"><?php echo $value['rating']; ?></span></td>
</tr>
<?php endforeach;?>
</tbody>
</table>
В routes.php добавляем
$route['movies/table/rating'] = 'movies/table/rating/$1';
В header обновляем ссылку
<li> <a href="/movies/table/rating/">Рейтинг фильмов</a> </li>
Доброго Дня!
Простите пожалуйста за вопрос. Я решил попробовать ради интереса сделать немного иначе:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Ratings extends MY_Controller {
public function __construct() {
parent:: __construct();
}
public function index() {
$this->data['title'] = "Рейтинги" ;
$this->load->library('pagination');
$offset = (int) $this->uri->segment(2);
$row_count = 2;
$count = count($this->films_model->getFilms(0, 1));
$this->data['ratings'] = $this->films_model->getMoviesOnPage($row_count, $offset, 1);
$p_config['base_url'] = '/ratings/';
$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>";
$this->pagination->initialize($p_config);
$this->data['pagination'] = $this->pagination->create_links();
$this->load->view('templates/header', $this->data);
$this->load->view('ratings/index', $this->data);
$this->load->view('templates/footer');
}
}
а в routes прописал :
$route['ratings'] = 'ratings';
$route['ratings/(:any)'] = 'ratings/$1';
Сама пагинация отображается, при переходе например по http://kinomonster.com/ratings/2 пишет что страница не найдена. подскажите пожалуйста как можно решить эту проблему?
а если я дпишу типа
$route['movies/rating/films']?
или вообще в другом каталоге?