Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter 3博客错误:帖子id替换为类别id_Php_Codeigniter - Fatal编程技术网

Php Codeigniter 3博客错误:帖子id替换为类别id

Php Codeigniter 3博客错误:帖子id替换为类别id,php,codeigniter,Php,Codeigniter,我正在Codeigniter 3.1.8中开发一个基本的博客应用程序 这些帖子会显示在主页上,并按类别进行过滤 每当我试图从分类页面查看帖子时,其url的末尾都有分类id,而不是帖子id。id为1的分类中的所有帖子都链接到http://localhost/ciblog/posts/post/1 在Posts\u模型中有: public function get_posts_by_category($id, $limit, $offset) { $this->db->order

我正在Codeigniter 3.1.8中开发一个基本的博客应用程序

这些帖子会显示在主页上,并按类别进行过滤

每当我试图从分类页面查看帖子时,其url的末尾都有分类id,而不是帖子id。id为1的分类中的所有帖子都链接到
http://localhost/ciblog/posts/post/1

Posts\u模型中有:

public function get_posts_by_category($id, $limit, $offset) {
    $this->db->order_by('posts.id', 'DESC');
    $this->db->limit($limit, $offset);
    $this->db->join('categories', 'categories.id = posts.cat_id');
    $query = $this->db->get_where('posts', array('cat_id' => $id));
    return $query->result();
}
类别中控制器:

public function posts($id) {
    $this->load->library('pagination');
    $config = [
        'base_url' => base_url('/categories/posts/' . $id),
        'page_query_string' => TRUE,
        'query_string_segment' => 'page',
        'display_pages' => TRUE,
        'use_page_numbers' => TRUE,
        'per_page' => 12,
        'total_rows' => $this->Posts_model->get_num_rows_by_category($id),
        //More code
    ];
    if (!isset($_GET[$config['query_string_segment']]) || $_GET[$config['query_string_segment']] < 1) {
        $_GET[$config['query_string_segment']] = 1;
    }
    $limit = $config['per_page'];
    $offset = ($this->input->get($config['query_string_segment']) - 1) * $limit;
    $this->pagination->initialize($config);

    $data = $this->Static_model->get_static_data();
    $data['categories'] = $this->Categories_model->get_categories();
    $data['category_name'] = $this->Categories_model->get_category($id)->name;
    $data['posts'] = $this->Posts_model->get_posts_by_category($id, $limit, $offset);

    $this->load->view('partials/header', $data);
    $this->load->view('categories/posts');
    $this->load->view('partials/footer');
}
<div class="container">
    <div class="col-xs-12">
        <h1 class="display-4 category-name"><?php echo $category_name; ?></h1>
    </div>  
    <?php if ($posts): ?>
        <div class="posts-grid">
            <?php foreach ($posts as $post) :?>
                <div class="col-xs-12 col-sm-6 col-lg-4 col-xl-3">
                    <div class="post">
                        <div class="thumbnail">
                            <a href="<?php echo base_url('posts/post/') . $post->id; ?>">
                                <img src="<?php echo base_url('assets/img/posts/') . $post->post_image; ?>" />
                            </a>
                        </div>
                        <div class="text">
                            <h2 class="card-title">
                                <a href="<?php echo base_url('posts/post/') . $post->id; ?>">
                                    <?php echo $post->title; ?>
                                </a>
                            </h2>
                            <p class="text-muted"><?php echo $post->description; ?></p>
                        </div>
                        <div class="read-more">
                            <a class="btn btn-block btn-sm btn-success" href="<?php echo base_url('posts/post/') . $post->id; ?>">Read more</a>
                        </div>
                    </div>
                </div>
            <?php endforeach ?>
        </div>
    <?php else: ?>
        <div class="col-xs-12">
            <p class="text-muted" id="no_posts">There are no posts in the <?php echo $category_name; ?> category yet.</p>
        </div>
    <?php endif; ?>

    <?php $this->load->view("partials/pagination");?>

</div>
公共职能职位($id){
$this->load->library('pagination');
$config=[
'base_url'=>base_url('/categories/posts/'.$id),
“页面查询字符串”=>TRUE,
“查询字符串片段”=>“页面”,
“显示页面”=>TRUE,
“使用页码”=>TRUE,
“每页”=>12页,
“总计行数”=>this->Posts\u model->get\u num\u rows\u by\u category($id),
//更多代码
];
如果(!isset($\u GET[$config['query\u string\u segment']]))$\u GET[$config['query\u string\u segment']]<1){
$\u GET[$config['query\u string\u segment']=1;
}
$limit=$config['每页'];
$offset=($this->input->get($config['query\u string\u segment'))-1)*$limit;
$this->pagination->initialize($config);
$data=$this->Static_model->get_Static_data();
$data['categories']=$this->categories\u model->get\u categories();
$data['category\u name']=$this->Categories\u model->get\u category($id)->name;
$data['posts']=$this->posts\u model->get\u posts\u by\u category($id、$limit、$offset);
$this->load->view('partials/header',$data);
$this->load->view('categories/posts');
$this->load->view('partials/footer');
}
上述控制器中的posts视图:

public function posts($id) {
    $this->load->library('pagination');
    $config = [
        'base_url' => base_url('/categories/posts/' . $id),
        'page_query_string' => TRUE,
        'query_string_segment' => 'page',
        'display_pages' => TRUE,
        'use_page_numbers' => TRUE,
        'per_page' => 12,
        'total_rows' => $this->Posts_model->get_num_rows_by_category($id),
        //More code
    ];
    if (!isset($_GET[$config['query_string_segment']]) || $_GET[$config['query_string_segment']] < 1) {
        $_GET[$config['query_string_segment']] = 1;
    }
    $limit = $config['per_page'];
    $offset = ($this->input->get($config['query_string_segment']) - 1) * $limit;
    $this->pagination->initialize($config);

    $data = $this->Static_model->get_static_data();
    $data['categories'] = $this->Categories_model->get_categories();
    $data['category_name'] = $this->Categories_model->get_category($id)->name;
    $data['posts'] = $this->Posts_model->get_posts_by_category($id, $limit, $offset);

    $this->load->view('partials/header', $data);
    $this->load->view('categories/posts');
    $this->load->view('partials/footer');
}
<div class="container">
    <div class="col-xs-12">
        <h1 class="display-4 category-name"><?php echo $category_name; ?></h1>
    </div>  
    <?php if ($posts): ?>
        <div class="posts-grid">
            <?php foreach ($posts as $post) :?>
                <div class="col-xs-12 col-sm-6 col-lg-4 col-xl-3">
                    <div class="post">
                        <div class="thumbnail">
                            <a href="<?php echo base_url('posts/post/') . $post->id; ?>">
                                <img src="<?php echo base_url('assets/img/posts/') . $post->post_image; ?>" />
                            </a>
                        </div>
                        <div class="text">
                            <h2 class="card-title">
                                <a href="<?php echo base_url('posts/post/') . $post->id; ?>">
                                    <?php echo $post->title; ?>
                                </a>
                            </h2>
                            <p class="text-muted"><?php echo $post->description; ?></p>
                        </div>
                        <div class="read-more">
                            <a class="btn btn-block btn-sm btn-success" href="<?php echo base_url('posts/post/') . $post->id; ?>">Read more</a>
                        </div>
                    </div>
                </div>
            <?php endforeach ?>
        </div>
    <?php else: ?>
        <div class="col-xs-12">
            <p class="text-muted" id="no_posts">There are no posts in the <?php echo $category_name; ?> category yet.</p>
        </div>
    <?php endif; ?>

    <?php $this->load->view("partials/pagination");?>

</div>

该类别中还没有帖子

帖子、图片、标题等显示正确单个帖子的链接


我的错误在哪里?

您需要选择用于检索Post_模块中的数据的表:

public function get_posts_by_category($id, $limit, $offset) {
    $this->db->select('t1.*');
    $this->db->order_by('t1.id', 'DESC');
    $this->db->limit($limit, $offset);
    $this->db->join('categories t2', 't2.id = t1.cat_id');
    $query = $this->db->get_where('posts t1', array('t1.cat_id' => $id));
    return $query->result();
}

使用
$this->db->select(),指定查询中的选择部分

备选方案:

public function get_posts_by_category($id, $limit, $offset) {
    $this->db->select('posts.*'); // added
    $this->db->order_by('posts.id', 'DESC');
    $this->db->limit($limit, $offset);
    $this->db->join('categories', 'categories.id = posts.cat_id');
    $query = $this->db->get_where('posts', array('cat_id' => $id));
    return $query->result();
}

我工作过。但是我很困惑:为什么文章的其余部分被正确地呈现了呢?理论上,如果没有
select()
调用,返回列默认为定义的两个表中的所有列(通过*)——posts和categories。由于帖子和类别具有相同的名为
id
的列,因此第二个表覆盖了第一个表的列,因此所有帖子的id=1,这是类别id。无论哪种方式,您都会得到要呈现的记录。