错误的分页Codeigniter

时间:2015-03-29 23:52:49

标签: php codeigniter pagination

我的网站上有9个AD,我用10分页。好吧,codeigniter用10个广告分页,但在第二页和最后一页它应该只显示3个AD,显示10个(另7个页面)和应该是独一无二的3。

这是我的代码:

(控制器)

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

我的路线.php:

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

Ps:现在我有19个AD并且更改限制为6,仅适用于此分页测试。

谢谢高级!

1 个答案:

答案 0 :(得分:0)

您使用了$config['base_url']= base_url('');。这将产生这样的链接

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

或者你可以使用它。这将解决你的问题

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

<强>更新
  你说你的路由器包含这个代码

$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);

希望这些代码可以解决您的问题