4
respostas

Erro com pagination codeigniter.

Boa tarde, estou utilizando o método de paginação do codeigniter, porém quando clico para ir nas proximas páginas ele me retorna um 404 - NOT FOUND. abaixo segue os código:

MODEL

public function record_count() {
            return $this->db->count_all("cliente");
        }


        public function fetch_countries($limit, $start) {
            $this->db->limit($limit, $start);
            $query = $this->db->get("cliente");

            if ($query->num_rows() > 0) {
                foreach ($query->result() as $row) {
                    $data[] = $row;
                }
                return $data;
            }
            return false;
          }

VIEW

<div class="scroll">
    <table class="table table-hover" id="myTable">
        <thead>
            <tr>
                <th><b>Nome</b></th>
                <th><b>Email</b></th>
                <td><b>Telefone</b></td>
                <td><b>Cidade</b></td>
                <td><b>PR</b></td>
            </tr>
        </thead>

        <tbody>
        <?php foreach ($results as $data) : ?>
            <td><?= $data->nomeCliente ?></td>
            <td><?= $data->emailCliente ?></td>
            <td><?= $data->telefoneCliente ?></td>
            <td><?= $data->cidadeCliente ?></td>
            <td><?= $data->estadoCliente ?></td>            
            <td>
                <a ><i class="glyphicon glyphicon-trash" title="Apagar" onclick="modalDelete()"></i></a>
            </td>

            <td>
                <a href="index.php"><i class="glyphicon glyphicon-edit" title="Editar"></i></a>
            </td>

            <td>
               <a href="index.php"><i class="glyphicon glyphicon-eye-open" title="Visualizar"></i></a>
            </td>
        </tr>
    <?php endforeach ?>
    </tbody>
    </table>
    <center>
        <ul class="pagination">
            <li><a><?php echo $links; ?></a></li>
        <ul>
    </center>
    </div>

CONTROLLER

public function consultaClientes() {
        $this->output->enable_profiler(TRUE);
        $this->load->model("Cliente/Clientes_Model");
        $config["base_url"] = base_url('index.php/Cliente/');
        $config["total_rows"] = $this->Clientes_Model->record_count();
        $config["per_page"] = 5;
        $config['use_page_numbers'] = TRUE;
        $config["uri_segment"] = 3;
        $choice = $config["total_rows"] / $config["per_page"];
        $config["num_links"] = round($choice);

        $this->pagination->initialize($config);

        $page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
        $data["results"] = $this->Clientes_Model
            ->fetch_countries($config["per_page"], $page);
        $data["links"] = $this->pagination->create_links();

        $this->load->view("menu");
        $this->load->view("Cliente/Clientes", $data);
    }

Ainda tenho uma rota criada.

$route['Cliente'] = 'Cliente/Clientes/consultaClientes';
4 respostas

Bom dia Matheus, tudo bom?

Este link:

index.php/Cliente;

Retorna o que quando você tenta acessa-lo pelo navegador?

Aparentemente ele é a base do seu paginator, mas pelo o que você mostrou:

$route['Cliente'] = 'Cliente/Clientes/consultaClientes';

Essa é sua rota para consultar clientes. Acredito que sua rota base no paginator deveria ser a mesma.

Outro detalhe, na sua view você está renderizando todos os links de uma vez. Você pode utilizar helpers para isso =)

Qualquer problema é só falar.

Abraço e bons estudos.

Boa tarde, tudo tranquilo. Então o meu método consultaClientes chama a minha view consultaClientes, na verdade o que ela faz, existe uma tabela com as informações do cliente e um botão para cadastro, ou seja é tudo em apenas uma página só. Veja abaixo a view completa.

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?>
<html>
<head>

     <script>





            /*
             * Função que carrega após o DOM estiver carregado.
             * Como estou usando o ajaxForm no formulário, é aqui que eu o configuro.
             * Basicamente somente digo qual função será chamada quando os dados forem postados com sucesso.
             * Se o retorno for igual a 1, então somente recarrego a janela.
             */
            $(function () {

                $('#modalObras').on('show.bs.modal', function (e) {
                    $('.formulario').resetForm();
                });

                $('.formulario').ajaxForm({
                    success: function (data) {
                    window.location.href = '<?=base_url("/index.php/Cliente/Clientes/consultaClientes")?>';
                    }
                });
            });



            //Aqui eu seto uma variável javascript com o base_url do CodeIgniter, para usar nas funções do post.
            var base_url = "<?= base_url() ?>";

            /*
             *  Esta função serve para preencher os campos do cliente na janela flutuante
             * usando jSon.  
             */
            function carregaDadosClienteJSon(id_cliente) {
                $.post(base_url + '/index.php/clientes/dados_cliente', {
                    id_cliente: id_cliente
                }, function (data) {
                    $('#nome').val(data.nome);
                    $('#email').val(data.email);
                    $('#id_cliente').val(data.id_cliente);//aqui eu seto a o input hidden com o id do cliente, para que a edição funcione. Em cada tela aberta, eu seto o id do cliente. 
                }, 'json');
            }

            function modalCliente() {
                $('#modalCliente').modal('show');
            }

            function modalDelete(){
                $('#modalDelete').modal('show');   
            }

        </script>

        <style>
            th,i{
                cursor:pointer;
            }
        </style>
</head>
<body>  
<div class="container-fluid">
    <div class="side-body">
    <br>
    <button class="btn btn-success"  onclick="modalCliente()">Novo Cadastro</button>  

    <form method="POST" id="form-pesquisa" action="">
        <br>
        <div class="form-group">
            <input type="text" name="pesquisa" class="form-control" id="pesquisa" placeholder="O que você está procurando?">
        </div>
    </form>

    <div class="scroll">
    <table class="table table-hover" id="myTable">
        <thead>
            <tr>
                <th><b>Nome</b></th>
                <th><b>Email</b></th>
                <td><b>Telefone</b></td>
                <td><b>Cidade</b></td>
                <td><b>PR</b></td>
            </tr>
        </thead>

        <tbody>
        <?php foreach ($results as $data) : ?>
            <td><?= $data->nomeCliente ?></td>
            <td><?= $data->emailCliente ?></td>
            <td><?= $data->telefoneCliente ?></td>
            <td><?= $data->cidadeCliente ?></td>
            <td><?= $data->estadoCliente ?></td>            
            <td>
                <a ><i class="glyphicon glyphicon-trash" title="Apagar" onclick="modalDelete()"></i></a>
            </td>

            <td>
                <a href="index.php"><i class="glyphicon glyphicon-edit" title="Editar".></i></a>
            </td>

            <td>
               <a href="index.php"><i class="glyphicon glyphicon-eye-open" title="Visualizar"></i></a>
            </td>
        </tr>
    <?php endforeach ?>
    </tbody>
    </table>
    <center>
        <ul class="pagination">
            <li><a><?php echo $links; ?></a></li>
        <ul>
    </center>
    </div>
    </div>
    <!-- Chamada do Modal -->

<!--Modal -->
<div id="modalCliente" class="modal fade" role="dialog">
    <div class="modal-dialog" >   
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                <h4 class="modal-title">Cadastro de Produtos</h4>
            </div>
            <div class="modal-body">
            <form role="form" method="post" class="formulario" action="<?= base_url("/index.php/Cliente/Clientes/salva") ?>" id="formulario_clientes">
                <ul class="nav nav-tabs">
                    <li class="active"><a data-toggle="tab" href="#gerais">Gerais</a></li>
                    <li><a data-toggle="tab" href="#outros">Outros</a></li>
                    <li><a data-toggle="tab" href="#especificos">Especificos</a></li>
                <ul>
                <br><br>
                 <div class="tab-content">
                    <div id="gerais" class="tab-pane fade in active">
                    <br>
                        <div class="form-group">
                            <label for="nomeCliente">Nome</label>
                            <input type="text" class="form-control" id="nomeCliente" name="nomeCliente">
                        </div>

                        <div class="form-group">
                            <label for="cpfCNPJ">CPF/CNPJ</label>
                            <input type="number" class="form-control" id="cpfCNPJ" name="cpfCNPJ">
                        </div>

                        <div class="form-group">
                            <label for="data">Data Nascimento</label>
                            <input type="text" class="form-control" id="data" name="data">
                        </div>

                        <div class="form-group">
                            <label for="fone">Telefone</label>
                            <input type="text" class="form-control" id="fone" name="fone">
                        </div>

                    </div>

                    <br><br>

                    <div id="outros" class="tab-pane fade">
                        <div class="form-group">
                            <label for="estado">Estado</label>
                            <input type="text" class="form-control" id="estado" name="estado">
                        </div>

                        <div class="form-group">
                            <label for="cidade">Cidade</label>
                            <input type="text" class="form-control" id="cidade" name="cidade">
                        </div>

                        <div class="form-group">
                            <label for="endereco">Endereço</label>
                            <input type="text" class="form-control" id="endereco" name="endereco">
                        </div>

                        <div class="form-group">
                            <label for="bairro">Bairro</label>
                            <input type="text" class="form-control" id="bairro" name="bairro">
                        </div>

                        <div class="form-group">
                            <label for="Complemento">Complemento</label>
                            <input type="text" class="form-control" id="Complemento" name="Complemento">
                        </div>
                    </div>
                    <div id="especificos" class="tab-pane fade">
                        <div class="form-group">
                            <label for="email">E-mail</label>
                            <input type="text" class="form-control" id="email" name="email">
                        </div>
                    </div>
                </div>
            </div>

            <div class="modal-footer">
               <button type="button" class="btn btn-default" data-dismiss="modal">Fechar</button>
                        <button type="button" class="btn btn-primary" onclick="$('#formulario_clientes').submit()">Incluir</button>
            </div>
        </div>
    </div>
</div>

</div>


<!--Modal Deletar-->

<div id="modalDelete" class="modal fade">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title">Apagar registro</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <p>Tem certeza que deseja apagar esse registro?></p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-warning">Sim</button>
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Não</button>
      </div>
    </div>
  </div>
</div>
<?php echo $this->pagination->create_links(); ?>

<script type="text/javascript">
    $(document).ready(function() { 
        $("#myTable").tablesorter(); 
        } 
    ); 
</script>
</body>
</html>

Oi Matheus, legal sua view tem bastante coisa implementada.

As vezes adicionar muitas funcionalidades em uma mesma view pode gerar alguns problemas de manutenção a longo prazo.

Mas, acredito que seu erro esteja relacionado ao back-end mesmo. Qual erro aparece na sua pagina exatamente?

Acredito que o problema esteja no acesso diretamente pelo script:

index.php/Cliente;

Pois é isso que estamos adicionando no array de links que vai pra view.

E no mapeamento de rotas parece que a URL certa seria:

Cliente/Clientes/consultaClientes

A mesma ideia se repete em alguns pontos da sua view:

                    window.location.href = '<?=base_url("/index.php/Cliente/Clientes/consultaClientes")?>';
// aqui estamos acessando /index.php diretamente

Entre outros =)

Preciso ver exatamente quala é o erro, mas acredito que o problema esteja na forma de acessar as rotas mesmo...

Bom não sei se ainda esta com esta duvida mais outras pessoas podem estar então vou postar uma solulção. Já tive este problema quando criei a paginação o problema é quando voce coloca a paginação no index como por exemplo:

class Pedidos extends CI_Controller {

    public function index(){
            $this->load->library('pagination');
        $config['base_url'] = base_url().'pedidos/';
        ... etc ...
      }
}

Se sua paginação estiver em qualquer outra pagina blz, mas para trabalhar no index adicione um function antes, por exemplo, eu coloco uma function exemplo gerenciar dentro da index, como abaixo:

class Pedidos extends CI_Controller {

    public function index(){
            $this->gerenciar();
      }

    public function gerenciar(){
            $this->load->library('pagination');
        $config['base_url'] = base_url().'pedidos/gerenciar/';
        ... etc ...
      }
}

não esquecendo que na base_url deve colocar sempre o endereço completo no exemplo = "pedidos/gerenciar/" se nao da erro 404