【问题标题】:How to get previous and next posts in codeigniter blog post page如何在 codeigniter 博客文章页面中获取上一篇和下一篇文章
【发布时间】:2021-10-17 07:20:09
【问题描述】:

我正在 Codeigniter 中创建博客。现在在博客文章查看页面上,我想要上一篇和下一篇文章的链接。这是我的博客详细信息控制器。

    public function blog_details($slug = NULL){
    //data
    $data['blog_info'] = $this->Blog_model->get_posts($slug);
    if(empty($data['blog_info'])){
        show_404();
    }
    
    $data['post_name'] = $data['blog_info']['post_name'];//post name
    $data['categories'] = $this->Blog_model->get_categories();
    //meta title, discription, keywords
    $data['meta_title'] = $data['blog_info']['post_name'];
    $data['meta_description'] = $data['blog_info']['post_meta'];
    $data['meta_keywords'] = $data['blog_info']['post_tags'];
    //view
    $data['main_content'] = 'blog_details';
    $this->load->view('include/template',$data);
}

我的模型是

   public function get_posts($slug = FALSE, $limit = TRUE, $offset = FALSE){
        if($limit){
            $this->db->limit($limit, $offset);
        }
        if($slug === FALSE){
            $this->db->order_by('blogs.post_id', 'DESC');
            $this->db->join('category', 'category.category_name = blogs.category');
            $query = $this->db->get('blogs');
            return $query->result_array();
        }
    
        $query = $this->db->get_where('blogs', array('post_slug' => $slug));
        return $query->row_array();
    }

如何使用帖子名称创建上一个和下一个帖子链接?提前致谢。

【问题讨论】:

  • 如果 limit 和 offset 是布尔类型的值,那么你怎么能期望 limit 子句起作用呢? empty() 在保证变量存在时是不合适的。

标签: php mysql codeigniter codeigniter-3 blogs


【解决方案1】:

您可以使用直接查询方法在查询下方运行,只需传递您的博客 ID 即可获取上一个和下一个博客名称

public function get_prewnext($id){
    $query =  $this->db->query("SELECT name,
       (SELECT name FROM blog s1
        WHERE s1.id < s.id
        ORDER BY id DESC LIMIT 1) as previous_name,
       (SELECT name FROM blog s2
        WHERE s2.id > s.id
        ORDER BY id ASC LIMIT 1) as next_name
FROM blog s
    WHERE id = $id;");
    
    if($query->num_rows() > 0){
            $data =  $query->result_array();
        }
        $query->free_result();
       
        return $data;
 }

注意:如果没有找到 value 则返回 null。

【讨论】:

  • 此查询未使用最佳实践。当占位符合适时,不应将变量直接注入到 sql 中。释放结果是不必要的,以及检查 num_rows。
猜你喜欢
  • 1970-01-01
  • 2015-06-26
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多