我正在使用codeigniter来编码我的网站,而且我遇到了障碍。我知道如何在常规的非MVC中做到这一点,而不是OOP PHP,但我在Codeigniter中苦苦挣扎。
我有blog_model.php,它具有从我的数据库中检索日期时间的功能,将其分解为数组,以便我可以在模型外部使用它并将其提供给CSS,其中我有单独的日历图标。每个日历图标都由视图中的月份编号加载(<div class='calendar-icon-$stats['date']
)。此函数还从单个帖子中提取注释量并将其输出到数组中,以便我可以在视图中显示它。
public function get_stats($id) {
$this->db->select('id,datetime')->from('blog_posts')->where('id',$id);
$dquery = $this->db->get();
$dquery = $dquery->row_array();
$date = date('Y-m-d', strtotime($dquery['datetime']));
$stats = explode("-", $date); // This makes $stats[0] the year, $stats[1] the month and $stats[2] the day.
$stats['time'] = date('H:i', strtotime($dquery['datetime']));
$stats['comcount'] = $this->db->get_where('blog_comments', array('blogid' => $id));
$stats['comcount'] = $stats['comcount']->num_rows();
return $stats;
}
还有一个函数可以检索最近的三个条目:
public function get_blog_last() {
$query = $this->db->order_by('id desc')->get('blog_posts',3);
return $query->result_array();
}
然后将此代码加载到我的控制器中并发送到要显示的视图:
$data['blog'] = $this->blog_model->get_blog_last();
$data['stats'] = $this->blog_model->get_stats($data['blog']);
$this->load->view('index',$data);
我面临的问题是如何为索引页面上的每个条目运行get_stats()函数,其中显示最后三个条目。到目前为止,我只能让它为其中一个运行,因此我首页上的所有三个条目都具有相同的日期,相同的时间和相同数量的注释。我想把代码放在一个模型中可以避免重复自己,当我不得不为档案页面(我显示月份的所有帖子)和主要的入口页面加载它时,我只显示该条目及其注释。
所以,这里的最终问题是:
我也有一些问题要找出传递给我的get_stats()函数的正确值。
任何指导都将不胜感激。提前谢谢。
答案 0 :(得分:1)
如果我理解正确,您需要为get_stats
中收到的三个条目中的每个条目致电get_blog_last
。如果是这种情况,只需将get_blog_last
更改为:
public function get_blog_last() {
$query = $this->db->order_by('id desc')->get('blog_posts',3);
$entries = $query->result_array(); // get the latest entries array
foreach ($entries as $index => $entry) { // loop through those entries
$stats = $this->get_stats($entry['id']); // call this model's `get_stats` method
$entries[$index]['stats'] = $stats; // add a `stats` key to the entry array
}
return $entries;
}
答案 1 :(得分:0)
你为什么不把
$this->blog_model->get_stats($data['blog']);
内循环? (我宁愿使用普通循环)
示例:
$stat_list = array();
for($i=0;$i<count($data['blog']);$i++){
$stat_list[] = $this->blog_model->get_stats($data['blog'][$i]);
}
$data['stats'] = $stat_list;
并且在您看来,您应该尝试打印每个$stat_list