@Nick_Adams

Как сгруппировать посты по дате для отображения?

Добрый вечер, подскажите, хочу сгруппировать данные для такого отображения:

32fed4368c3c4bfb8dbeb241b83c4cc3.png

у меня вот такой вот foreach:

<?php if (!empty($stories)): ?>

   <?php foreach($stories as $sto): ?>

    <a href="<?php echo $sto['post_url']; ?>" target="_blank" class="story-link"><?php echo $sto['post_subject']; ?></a>
<time datetime="<?php echo $sto['post_date']; ?>"><?php echo $this->stories_model->calculartempo($sto['post_date'], date("Y-m-d H:i:s")); ?></time>

   <?php endforeach; ?>

<?php else: ?>  

   <span>No stories</span>

<?php endif; ?>


я пытаюсь переписать foreach для отображения даты:

<?php if (!empty($stories)): ?>

<?php foreach($stories as $key => $sto): ?>

   ** сдесь должен быть див, который отображается перед каждой "группировкой" постов **

   <?php foreach($sto as $sstory): ?>

    <a href="<?php echo $sstory['post_url']; ?>" target="_blank" class="story-link"><?php echo $sstory['post_subject']; ?></a>
<time datetime="<?php echo $sstory['post_date']; ?>"><?php echo $this->stories_model->calculartempo($sstory['post_date'], date("Y-m-d H:i:s")); ?></time>

   <?php endforeach; ?>

<?php endforeach; ?>

<?php else: ?>  

   <span>No stories</span>

<?php endif; ?>


и это моя модель поста ( истории )

public function get_stories($offset = null, $search = "", $filter =  "Popular", $category = "") 
{

$ui = $this->session->userdata('userid');
if ($ui == "") $ui = 0;

$this->db->select('posts.*, users.*, COUNT(post_comments.posts_id) AS numbercomments, COUNT(posts_votes.vote_id) AS numbervotes, categories_posts.post_id as postid, categories.category_name, categories.id_category, favourites.posts_id as favourite'); 


$this->db->join('users', 'posts.post_by = users.user_id', 'left');
$this->db->join('post_comments', 'posts.post_id = post_comments.posts_id', 'left');
$this->db->join('posts_votes', 'posts_votes.vote_postid = posts.post_id', 'left');
//$this->db->order_by("posts.post_date");
$this->db->join('categories_posts', 'categories_posts.post_id = posts.post_id', 'left');
$this->db->join('categories', 'categories.id_category = categories_posts.id_category', 'left');

$this->db->join('favourites', "posts.post_id = favourites.posts_id AND favourites.user_id=$ui", 'left');        

if ($category != "") {
    $this->db->where('categories_posts.id_category', $category);
}

$this->db->group_by("posts.post_id");       

if ($filter == "Recent") {
    $this->db->order_by("post_date", "desc");
} else if ($filter == "Most Comment") {
    $this->db->order_by("numbercomments", "desc");
} else {
    $this->db->order_by("numbervotes", "desc");         
}

if (strlen($search)>1) {
    $this->db->like('posts.post_subject', $search);         
}

$this->db->where('posts.approved', 1);
//$query = $this->db->get(); 
$query = $this->db->get('posts', 10, $offset);
//$this->output->enable_profiler(TRUE);     
return $query->result_array();


Я так понимаю, мне нужно показать посты по дате, раскомментировав это:

$this->db->order_by("posts.post_date");

Но каким образом тогда должен выглядеть мой foreach? благодарю!
  • Вопрос задан
  • 512 просмотров
Решения вопроса 1
nskarl
@nskarl
Вообще дизайнер
может быть на первую итерацию foreach записать дату в переменую. затем сравнивать текущую дату итерации с той, что в переменной
затем простой иф дата !равно дата то показывать див и обновить переменную

группировать по дате в запросе модели точно нельзя
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы