Codeigniter Домашнее задание урока 19

1

В этом ДЗ надо создать страницу рейтинга фильмов.
Подскажите пожалуйста, что же я делаю не так?

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');
}

В браузере выводит ошибку, где говорится что страница не найдена.
(Делал так в своём личном проекте, всё работает, а тут нет)

codeigniter
route

5 ответов

2

А в роутере $route['movies/rating'] = 'movies/rating'; перед есть запись типа $route['movies/(:any)'] = 'movies/view/$1';?

вроде последовательность влияет. 

2

У меня так написано, правда в 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');
}

4

Просмотров у данного вопроса масса.

Если вдруг кому нужно,то в контроллере 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>

0

Доброго Дня!

Простите пожалуйста за вопрос. Я решил попробовать ради интереса сделать немного иначе:

<?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 пишет что страница не найдена. подскажите пожалуйста как можно решить эту проблему?

2

а если я дпишу типа

 $route['movies/rating/films']?

или вообще в другом каталоге?

Sign up or Log in to write an answer