Я предполагаю, что это только для отображения.Я также предполагаю, что у вас есть Posts_model
и Categories_model
.
class Categories_model extends CI_Model {
// Method for retrieving categories.
public function get_all_categories()
{
return $this->db
->order_by('whatever', 'DESC/ASC') // anything
->get('categories')
->result();
}
}
Теперь мы переходим к Posts_model
:
class Posts_model extends CI_Model {
// Method that count posts in categories.
public function count_posts_in_category($cat_id)
{
return $this->db
->where('cat_id', $id)
->count_all('posts'); // Or count_all_results (Check please)
}
}
Следующее, что нужно сделать, это использовать обаметоды в вашем контроллере:
class Your_controller extends CI_Controller {
// I assume you loaded all libs and models.
public function your_method()
{
// Get categories first.
$data['categories'] = $this->categories_model->get_all_categories();
// Now we add posts count:
if ($data['categories'])
{
foreach ($data['categories'] as &$category) // Notice the "&".
{
$category->posts_count = $this->posts_model->count_posts_in_category($category->id);
}
}
// Then load your sidebar and pass $data:
$this->load->view('your_sidebar', $data);
}
}
Представление должно быть (я скопировал ваш), и, пожалуйста, всегда используйте site_url
для URL (кроме ресурсов, вы можете использовать base_url
):
<?php foreach ($categories as $category): ?>
<a href="<?php echo site_url('/categories/posts/'.$category->id); ?>" class="list-group-item list-group-item-action">
<span class="text-muted"><?php echo $category->name; ?></span>
<span class="badge badge-secondary badge-pill"><?php echo $category->posts_count; ?></span>
</a>
<?php endforeach; ?>