codeigniter を使用してサイトのコーディングを行っていますが、障害が発生しています。OOP PHPではなく、通常の非「MVC」でこれを行う方法を知っていますが、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;
}
最新の 3 つのエントリを取得する関数もあります。
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);
私が直面している問題は、最後の 3 つのエントリが表示されるインデックス ページにあるすべてのエントリに対して get_stats() 関数を実行する方法です。これまでのところ、実行できるのはそのうちの 1 つだけです。したがって、フロント ページの 3 つのエントリはすべて、同じ日付、同じ時間、同じ量のコメントを持っています。コードをモデルに入れることで、アーカイブ ページ (その月のすべての投稿を表示する場所) とメイン エントリ ページ (そのエントリとそのコメントを表示するだけ) のためにコードをロードする必要があるときに、同じことを繰り返す必要がなくなると考えました。
したがって、ここでの究極の質問は次のとおりです。
- 特定のページにあるすべてのエントリに対して get_stats を実行するにはどうすればよいですか?
また、 get_stats() 関数に渡す正しい値を見つけるのに少し問題があります。
任意のガイダンスをいただければ幸いです。前もって感謝します。