2
I have 15 Ads on my website and I have made pagination for 10 Ads per page. Okay, Codeigniter is paging with 10 Ads/Page, but on the second and last page Codeigniter is showing 10, when it should show only 5. This is the Controller code:
function index($offset = 0) {
// load pagination library
$this->load->library('pagination');
$limit = 10;
$config = array();
$config['base_url'] = base_url('');
$config['uri_segment'] = 1;
$config['total_rows'] = $this->classificados_model->somarTodos($f_estado, $f_cidade);
$config['per_page'] = $limit;
$config['use_page_numbers'] = TRUE;
$config['num_links'] = 2;
$config['first_link'] = 'Primeiro';
$config['last_link'] = 'Último';
$config['next_link'] = '»';
$config['prev_link'] = '«';
$config['first_tag_open'] = '<li>';
$config['first_tag_close'] = '</li>';
$config['last_tag_open'] = '<li>';
$config['last_tag_close'] = '</li>';
$config['prev_tag_open'] = '<li>';
$config['prev_tag_close'] = '</li>';
$config['next_tag_open'] = '<li>';
$config['next_tag_close'] = '</li>';
$config['cur_tag_open'] = '<li class="active"><a href="javascript:">';
$config['cur_tag_close'] = ' <span class="sr-only">(current)</span> </a></li>';
$config['full_tag_open'] = '<nav>
<ul class="pagination">';
$config['full_tag_close'] = '</ul>
</nav>';
$config['num_tag_open'] = '<li>';
$config['num_tag_close'] = '</li>';
$this->pagination->initialize($config);
$dados['anuncios'] = $this->classificados_model->buscaAnuncios($limit, $offset, $f_estado, $f_cidade);
$dados['paginacao'] = $this->pagination->create_links();
}
Model: Standard Model
function buscaAnuncios($limit, $offset, $f_estado, $f_cidade) {
$this->db->limit($limit, $offset);
$where = array(
'estados.sigla' => $f_estado,
'cidades.nome' => $f_cidade,
'anuncios.anuncio_ativo' => '1',
'usuarios.bloqueado_usuario' => '0',
'usuarios.ativado_usuario' => '1'
);
$this
->db
->select("*")
->from("usuarios")
->join("anuncios", "anuncios.usuario_anuncio_id = usuarios.id_usuario", "inner")
->join("estados", "estados.id = usuarios.estado_usuario", "inner")
->join("cidades", "cidades.id = usuarios.cidade_usuario AND estados.id = cidades.id_uf", "inner")
->order_by("anuncios.data_anuncio","desc");
$query = $this->db->get_where('', $where);
return $query->result_array();
}
Result of page 2 query procedure:
SELECT *
FROM (`usuarios`)
INNER JOIN `anuncios` ON `anuncios`.`usuario_anuncio_id` = `usuarios`.`id_usuario`
INNER JOIN `estados` ON `estados`.`id` = `usuarios`.`estado_usuario`
INNER JOIN `cidades` ON `cidades`.`id` = `usuarios`.`cidade_usuario` AND estados.id = cidades.id_uf
WHERE `estados`.`sigla` = 'rj'
AND `cidades`.`nome` = 'rio de janeiro'
AND `anuncios`.`anuncio_ativo` = '1'
AND `usuarios`.`bloqueado_usuario` = '0'
AND `usuarios`.`ativado_usuario` = '1'
ORDER BY `anuncios`.`data_anuncio` desc
LIMIT 2, 10
Prints:
Page 1:
prntscr.com/6n4t5x
prntscr.com/6n4sra
Page 2:
prntscr.com/6n4tat
prntscr.com/6n4tg4
Thanks in advance!
your limit is wrong LIMIT 2, 10 should be LIMIT 10.20
– Otto
The "limit" would be the amount I want per page, right, but it is not right to appear that amount on the second, since the remaining 15 would be only 5 Ads on the second page..
– Vitor de Sousa