CodeIgniter中公告标题仅显示一条,如何实现全部标题展示?
解决公告标题仅显示一条的问题
咱们一步步排查修复,搞定这个问题:
1. 修正模型代码,返回所有符合条件的结果
你现在只显示一条的核心原因,是模型里用了row()方法——这个方法只会返回查询结果的第一行数据,不管数据库里有多少条都只取一条。另外还有几个细节需要调整:
- 把
row()改成result()(返回对象数组)或者result_array()(返回关联数组),这样就能拿到所有查询结果 order_by的第三个参数是多余的,CodeIgniter的order_by语法是order_by(字段名, 排序方向),直接删掉第三个参数$id_announcement- 如果你要显示全部4条公告,需要去掉
limit(3),不然最多只会返回3条 - 注意:你传入了
$id_announcement参数,但代码里没加where条件筛选;如果是要获取特定ID的公告,得加上->where('mp.id_announcement', $id_announcement);如果是要获取所有公告,这个参数可以改成可选或者直接忽略
修改后的模型代码:
public function getJudul($id_announcement = null) { $this->db->select('mp.id_announcement, mp.title_announcement, mp.isi_pengumuman') ->from('tbl_mst_pengumuman mp') ->order_by('mp.id_announcement','DESC'); // 可选:如果需要筛选特定ID的公告,就保留这部分 if ($id_announcement) { $this->db->where('mp.id_announcement', $id_announcement); } // 去掉limit限制,才能返回所有符合条件的公告 // ->limit(3); // 返回所有结果的对象数组(如果想用关联数组就换成result_array()) return $this->db->get()->result(); }
2. 修改视图代码,循环遍历所有公告标题
之前因为只返回单条数据,视图里应该是直接输出单个字段,现在需要用循环来遍历所有结果:
假设你之前的视图是直接输出$judul->title_announcement,现在改成循环结构:
<div class="portlet-body"> <div id="nt-example1-container"> <ul id="nt-example1" class="news"> <?php foreach ($judul as $item): ?> <li><?php echo $item->title_announcement; ?></li> <!-- 如果需要显示公告内容,可以加上下面这行 --> <!-- <p><?php echo $item->isi_pengumuman; ?></p> --> <?php endforeach; ?> </ul> </div> </div>
如果模型用的是result_array(),视图里就改成数组访问方式:$item['title_announcement']
3. 控制器代码按需调整
如果模型里把$id_announcement改成了可选参数,控制器的调用不需要改动;如果是要获取所有公告,直接调用$this->pengumuman->getJudul()即可。
这样调整后,所有符合条件的公告标题就都会显示出来啦~
内容的提问来源于stack exchange,提问作者munawarhusein




