2015-03-29 2 views
0

У меня есть 9 AD на моем сайте, и я делаю разбивку на страницы с 10. Хорошо, codeigniter делает разбиение на страницы на 10 объявлений, но на второй и последней странице должно отображаться только 3 AD, показать 10 (7 другая страница и 3, которые должны быть одни).Неправильная разбивка на страницы Codeigniter

Это мой код:

(контроллер)

class Classificados extends MY_Controller { 
    public function index($offset = 0) { 

     // load pagination library 

     $this->load->library('pagination'); 
     $limit = 6; 
     $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(); 

(модель)

Classificados_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(); 
    } 

Порядок стр.2:

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 

Мой route.php:

$route['(:num)']     = "classificados/index/$1"; 

Ps: Теперь у меня есть 19 объявлений и изменить лимит до 6, только для этого теста постраничной.

Спасибо заранее!

+0

пагинация делает ссылку страницы, но отображение контента на этой странице, зависит от you.what вы сделали на ваш взгляде? Прилагается код не связан с вашим вопросом. –

+0

Моя проблема заключается в пейджинге, а не в содержании. К сожалению, на второй странице также отображается часть содержимого первой страницы, когда она должна показывать только соответствующий контент на второй странице. Печать: Страница 1: http://prntscr.com/6n4t5x http://prntscr.com/6n4sra Страница 2: http://prntscr.com/6n4tat http://prntscr.com/6n4tg4 Ps: Теперь у меня есть 15 ADs –

+0

. Вы должны показать нам свой запрос db и какой лимит/смещение, которое вы используете в своем запросе, чтобы дать вам ответ. – sotoz

ответ

0

вы использовали $config['base_url']= base_url(''); .which будет производить ссылку как этот

baseurl/1 it means 1 is controller name 
baseurl/2 means 2 is controller name. 
In that case you need to use router function. 

В качестве альтернативы вы можете использовать this.This будет решить вашу проблему

$config['base_url']    = base_url().'YOUR_CONTROLLER/index';  
$config['uri_segment']   = 3; 

UPDATE
Вы сказали, что ваш маршрутизатор содержит это Код

$route['(:num)'] = "classificados/index/$1"; 

В этом случае ваш код Все в порядке, за исключением запроса ограничения модели.
В buscaAnuncios функции вашей модели

$this->db->limit($limit, $offset);//this line is wrong 

фактически $offset содержит номер страницы, так что вы не получаете фактическое смещение.

Замените эту строку с этими кодами

$offset--; 
if($offset<0) 
{ 
    $offset=0; 
} 
$this->db->limit($limit, $offset*$limit); 

Надеется, что это коды будут решить вашу проблему

+0

Не работает тоже .. показывает то же самое, но с другой ссылкой. –

+0

Каково ваше имя контроллера? и каков ваш базовый url? –

+0

Контроллер «classificados» –

Смежные вопросы