0

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() 関数に渡す正しい値を見つけるのに少し問題があります。

任意のガイダンスをいただければ幸いです。前もって感謝します。

4

2 に答える 2

1

私の理解が正しければ、get_statsで受け取った 3 つのエントリのそれぞれについて電話する必要があります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;
}
于 2013-04-02T14:54:56.633 に答える