【问题标题】:Wrong pagination Codeigniter错误的分页Codeigniter
【发布时间】:2015-03-29 23:52:49
【问题描述】:

我的网站中有 9 个广告,我用 10 个广告进行分页。好的,codeigniter 用 10 个广告进行分页,但是在第二页和最后一页中它应该只显示 3 个广告,显示 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页:prntscr.com/6n4t5xprntscr.com/6n4sra第2页:prntscr.com/6n4tatprntscr.com/6n4tg4ps:现在我有15个广告
  • 您应该向我们展示您的数据库查询以及您在查询中使用的限制/偏移量以便能够给您答案。
  • 我将编辑我的帖子!对不起...
  • @ShaifulIslam.. 你能帮忙解决这个问题吗?

标签: php codeigniter pagination


【解决方案1】:

你使用了$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);

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

【讨论】:

  • 不要工作了.. 显示相同的内容,但链接不同。
  • 您的控制器名称是什么?你的基本网址是什么?
  • 控制器是“classificados”
  • 那么您是否获得第 2 页的 rj.rio-de-janeiro.tudoparasuafesta.com.br/classificados/2 的页面链接?或 rj.rio-de-janeiro.tudoparasuafesta.com.br/classificados/index/2
  • rj.rio-de-janeiro.tudoparasuafesta.com.br/classificados/2
猜你喜欢
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
相关资源
最近更新 更多