Codeigniter 3分页链接和单个帖子链接抛出404

时间:2016-07-25 22:23:40

标签: codeigniter pagination codeigniter-3

我从这里读过其他文章,但无法解决这个问题。我的问题是2。

  1. 分页显示但点击分页链接会产生404。
  2. 我在db中有正在显示的文章列表,但是当我 单击单个文章页面的单个文章链接,它显示404。
  3. 我在localhost wamp上。这是我的代码。评论的代码是我一直在尝试的但是对我不起作用。

    的.htaccess

    <IfModule mod_rewrite.c>
    RewriteEngine On
    #RewriteCond $1 !^(index\.php|resources|robots\.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
    </IfModule>
    

    routes.php文件

    $route['default_controller'] = 'home';
    $route['404_override'] = 'not_found';
    $route['translate_uri_dashes'] = FALSE;
    
    $route['articles/(:any)'] = 'articles/$1';
    //$route['articles'] = 'articles';
    

    config / baseurl

    $config['base_url'] = 'http://localhost/practice/project-code-igniter/';
    $config['index_page'] = '';
    $config['uri_protocol'] = 'REQUEST_URI';
    

    控制器 - Articles.php

    class Articles extends CI_Controller {
    
    public function index($start=0)
    {
        // $this->output->cache('86400');
        $this->load->view('header');
        //load model
        // $this->load->model('articles_model');
        // load 'get_articles' function from 'articles_model' model and store it in data
    
        $this->load->library('pagination');
    
        $data['articles']=$this->articles_model->get_articles(5,$start);
    
        $config['base_url'] = base_url().'articles/';
        $config['total_rows'] = $this->db->get('articles')->num_rows();
        $config['per_page'] = 5;
        $config["uri_segment"] = 3;
        $config['use_page_numbers'] = TRUE;
        $config['num_links'] = 2; //NUMBER OF LINKS BEFORE AND AFTER CURRENT PAGE IF ON PAGE ONE WILL SHOW 4 PAGES AFTERWARDS IF YOU HAVE ENOUGH RESULTS TO FILL THAT MANY
    
        //config for bootstrap pagination class integration
        $config['full_tag_open'] = '<ul class="pagination">';
        $config['full_tag_close'] = '</ul>';
        $config['first_link'] = "&lt;&lt; First";
        $config['last_link'] = "Last &gt;&gt;";
        $config['first_tag_open'] = '<li>';
        $config['first_tag_close'] = '</li>';
        $config['prev_link'] = '&laquo';
        $config['prev_tag_open'] = '<li class="prev">';
        $config['prev_tag_close'] = '</li>';
        $config['next_link'] = '&raquo';
        $config['next_tag_open'] = '<li>';
        $config['next_tag_close'] = '</li>';
        $config['last_tag_open'] = '<li>';
        $config['last_tag_close'] = '</li>';
        $config['cur_tag_open'] = '<li class="active"><a href="#">';
        $config['cur_tag_close'] = '</a></li>';
        $config['num_tag_open'] = '<li>';
        $config['num_tag_close'] = '</li>';
    
        $this->pagination->initialize($config);
    
        //$data['pages'] = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
        //$page = ($this->uri->segment(3))? $this->uri->segment(3) : 0;
    
        // //call the model function to get the department data
        //$data['pages'] = $this->articles_model->get_articles($config["per_page"], $data['page']);
        $data['pages'] = $this->pagination->create_links();
    
    
        //$this->load->view('page_articles');
        // load view and load model data with it 
        $this->load->view('page_articles',$data);
    
        $this->load->view('footer');
    }
    
    
    // single article
    // function post($perma){
    //  $this->load->view('header');
    //  $this->load->model('articles_model');
    //  $data['articles']=$this->articles_model->get_single_article($perma);
    //  $this->load->view('page_article',$data);
    //  $this->load->view('footer');
    // }
    }
    

    型号/ Articles_model

    class Articles_model extends CI_Model {
    
    // function get_articles() {
    public function get_articles($limit, $start) {
    
        // $query = $this->db->query("SELECT * FROM articles");
        // $this->db->select()->from('articles');
        // $this->db->select()->from('articles')->where('active',1)->order_by('date_added','desc')->limit(0,20);
    
        $this->db->select()->from('articles')->where('status','1')->order_by('date_added','desc')->limit($limit, $start);
        $query = $this->db->get();
        // return object
        // return $query->result();
        // return array
        return $query->result_array();
    
    }
    
    function get_articles_count(){
        $this->db->select('id')->from('articles')->where('status',1);
        $query = $this->db->get();
        return $query->num_rows();
    }
    
    
    
    // for single article
    // function get_single_article($perma){
    //  $this->db->select()->from('articles')->where(array('status'=>1,'permalink'=>$perma));
    //  $query = $this->db->get();
    //  return $query->first_row('array');
    // }
    
    
    }
    

    查看/ page_articles

    <?php
    if(!isset($articles)) { ?> <div class="alert alert-info">No records</div> <?php } else 
    { 
    
      ?>
    
          <ol>
              <?php 
              foreach($articles as $row) 
              { ?>
    
                    <li>
                        <h4><a href="<?php echo base_url(); ?>articles/<?php echo $row['id']; ?>/<?php echo $row['permalink']; ?>/">
                            <?php echo $row['name']; ?>
                        </a></h4>
                        <p><?php echo substr(strip_tags($row['detail']),0,100).".."; ?>
                        <br>
                        <a href="<?php echo base_url(); ?>articles/<?php echo $row['id']; ?>/<?php echo $row['permalink']; ?>/">Read more</a>
                        </p>
                        <br>
                    </li>
    
              <?php } ?>
          </ol>
    
          <?php
    }
    ?>
    </p>
    
    <div>
        <?php echo $pages; ?>
    </div>
    

    enter image description here

1 个答案:

答案 0 :(得分:0)

一个问题......

public function index($start=0)

您似乎使用$start作为您的页码,并再次使用offset值......

$data['articles']=$this->articles_model->get_articles(5,$start);

如果$start表示您的页码,则您也不能将其用于offset值。

您的偏移量需要计算......

$offset = ($start - 1) * 5;
$data['articles']=$this->articles_model->get_articles(5, $offset);

示例:

每页有5条记录,第4页将从第16条记录开始。所以15是正确的offset来获取记录#16,17,18,19和&amp;第4页的20页。

另一个潜在问题......

$config["uri_segment"] = 3;

您已将页码设为第3段,但您的路线显示第2段的页码...

$route['articles/(:any)'] = 'articles/$1';

它也与此设置不匹配,这也会将您的页码放在第2段......

$config['base_url'] = base_url().'articles/';

基于your comment

  

waow。我刚刚做了什么...我将$config['base_url'] = base_url().'articles/';更改为$config['base_url'] = base_url().'articles/index/';,分页链接现在显示页面,但记录没有变化。 404消失了,页面也在变化 - 记录在所有页面上都是前5个....

然后路线应该是这个......

$route['articles/index/(:any)'] = 'articles/$1';

所以它匹配你描述的新base_url ......

$config['base_url'] = base_url().'articles/index/';