Разбиение на страницы Codeigniter дает ошибку 404

Не могли бы вы помочь мне с моей проблемой разбивки на страницы в Codeigniter? У меня есть представление, в котором перечислены книги. Я написал код и теперь вижу кнопки, но содержимое не ограничено, как я хотел. Не могу найти, что не так с кодом.

Это обновленный код: Контроллер:

public function index($offset=0){

    $config['base_url'] = 'http://localhost/myLibrary/books/index';
    //$config['total_rows'] = 200;
    $config['total_rows'] = $this->db->get('books')->num_rows();
    $config['per_page'] = 1;
    $config['uri_segment']= 3;
    $config['attributes'] = array('class' => 'pagination-link');
    $config['page_query_string'] = TRUE;

    $this->pagination->initialize($config); 
    $book_list = $this->Books_model->list_books();
    $genre_list= $this->Books_model->list_genres();
    $author_list= $this->Books_model->list_authors();
    $view_data = array(
        "book_list" => $book_list,
        "genre_list" => $genre_list,
        "author_list" => $author_list
    );


    $this->db->get('books', $config['per_page'], $this->uri->segment(3));
    $start = isset($_GET['start']) ? $_GET['start'] : 0;
    $book_list = $this->Books_model->list_books($start, $config['per_page']);


    $this->load->view("book_list",$view_data); 
    $this->load->library('pagination');
    $this->load->library('table');

}

Модель:

public function list_books($limit = FALSE, $offset = FALSE){
    if ($limit)
    {
        $this->db->limit($offset, $limit);
    }
    $list=$this->db->get("books")->result();
    return $list;
}

Вид:

<?php echo $this->pagination->create_links(); ?>

Я был бы так рад, если бы вы могли помочь и заранее спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
63
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Вместо этого измените свою строку на это:

$config['base_url'] = site_url('controller/method/');

Также причина, по которой ваши данные не ограничены, заключается в том, что вы отправляете параметр start как false в модель.

Так должно быть:

$data['records'] = $this->Books_model->list_books($this->uri->segment(3), $config['per_page'], $offset);

Посмотрев на ваш код, вы увидите, что список книг, отправляемых в файл представления, сохраняется в переменной $ book_list, поэтому, чтобы ограничить количество возвращаемых книг, измените вашу строку на это:

$start = isset($_GET['start']) ? $_GET['start'] : 0;
$book_list = $this->Books_model->list_books($start, $config['per_page']);

И добавьте это вам свой массив конфигурации разбивки на страницы:

$config['page_query_string'] = TRUE;

И в вашей модели функции измените эту строку:

$this->db->limit($limit, $offset);

К:

$this->db->limit($offset, $limit);

как указано в документации CI

$this->db->limit(10, 20); // Produces: LIMIT 20, 10 (in MySQL. Other databases have slightly different syntax)

Здесь можно найти дополнительную ссылку Ограничение CI

Также в качестве побочного примечания, глядя на ваш код, переменным $query и $data['records'] присваиваются значения, но они никогда не используются и не передаются в файл представления, поэтому они ничего не делают.

Вот как теперь должен выглядеть индексный метод в вашем контроллере: Контроллер:

public function index($offset=0){

    $config['base_url'] = site_url('books/index');
    //$config['total_rows'] = 200;
    $config['total_rows'] = $this->db->get('books')->num_rows();
    $config['per_page'] = 1;
    $config['uri_segment']= 3;
    $config['attributes'] = array('class' => 'pagination-link');
    $config['page_query_string'] = TRUE;

    $this->pagination->initialize($config); 
    $start = isset($_GET['start']) ? $_GET['start'] : 0;
    $book_list = $this->Books_model->list_books($start, $config['per_page']);
    $genre_list= $this->Books_model->list_genres();
    $author_list= $this->Books_model->list_authors();

    $view_data = array(
        "book_list" => $book_list,
        "genre_list" => $genre_list,
        "author_list" => $author_list
    );

    $this->load->view("book_list",$view_data); 
    $this->load->library('pagination');
    $this->load->library('table');

}

Модель:

public function list_books($limit = FALSE, $offset = FALSE){
        if ($limit !== FALSE)
        {
            $this->db->limit($offset, $limit);
        }
        $list=$this->db->get("books")->result();
        return $list;
    }

Большое спасибо! Я изменил базовый URL, как вы сказали, и ошибка 404 устранена. Также обновлены другие коды, но данные по-прежнему не ограничены

Ecem Belgin 12.07.2018 10:28

Я обновил коды, но, к сожалению, ничего не изменилось

Ecem Belgin 12.07.2018 10:41

Я обновил код, пожалуйста, проверьте их и дайте мне знать, работает ли он сейчас

Igor Ilic 12.07.2018 10:59
$start = isset($_GET['start']) ? $_GET['start'] : 0; $book_list = $this->Books_model->list_books($start, $config['per_page']); Этот тоже не работал
Ecem Belgin 12.07.2018 11:01

Вы также добавили $config['page_query_string'] = TRUE;?

Igor Ilic 12.07.2018 11:01

Да, я добавил

Ecem Belgin 12.07.2018 11:03

Можете ли вы опубликовать обновление своего кода, чтобы я мог видеть все изменения?

Igor Ilic 12.07.2018 11:06

Вы внесли изменения в код контроллера, но не в том месте. Я обновлю свой ответ, чтобы показать полное изменение

Igor Ilic 12.07.2018 14:04

А как насчет $start = isset($_GET['start']) ? $_GET['start'] : 0;?

Ecem Belgin 12.07.2018 15:19

К сожалению, он все еще не работает: / Я получаю все данные с первой страницы, и когда я нажимаю «2» или «3», все, что у меня есть, - это снова та же страница

Ecem Belgin 12.07.2018 15:34

Я обновил код модели, проверил и посмотрю, работает ли

Igor Ilic 12.07.2018 16:06

Игорь, спасибо за все твои усилия, но проблема все еще есть. Код выглядит солидно и даже работает в другом проекте codeigniter. С обновлением о пределе, которое вы посоветовали, я вижу первую запись на странице, но когда я нажимаю '2' или '3', все, что я вижу, это снова та же запись

Ecem Belgin 13.07.2018 09:43

Попробуйте добавить еще одну строку в массив конфигурации разбивки на страницы: $config['query_string_segment'] = 'start';

Igor Ilic 13.07.2018 09:45

Без изменений. Кстати, когда я var_dump(uri_string());, он возвращает пустую строку как C:\wamp64\www\myLibrary\application\controllers\Books.php:10‌​:string '' (length=0)

Ecem Belgin 13.07.2018 12:39

Проблема решена окончательно! Мне потребовалось многое изменить, спасибо за вашу помощь, Игорь!

Ecem Belgin 16.07.2018 08:37
$config['base_url'] = 'http://example.com/controller/index/page/'

Попробуйте добавить индекс как имя метода config ['base_url]. так что всякий раз, когда создается ваш URL-адрес страницы, он содержит имя метода. это происходит из-за автоматического вызова метода индекса, т.е. нам не нужно указывать имя метода, но в URL-адресе разбивки на страницы мы должны передать параметр смещения, мы должны использовать полный URL-адрес.

Большое спасибо! Теперь я не получаю ошибку 404, но данные все еще не ограничены

Ecem Belgin 12.07.2018 10:26

Другие вопросы по теме