CodeIgniter - Ежемесячные Архивы - PullRequest
0 голосов
/ 03 февраля 2012

Я пытаюсь разработать простой список ежемесячных архивов для блога моего сайта.Я вытащил записи из базы данных, и теперь мне просто нужно отсортировать их соответствующим образом, чтобы они выглядели следующим образом:

<h4>February '12</h4>

<ul>
    <li>Article 1</li>
    <li>Article 1</li>
    <li>Article 1</li>
</ul>

<h4>January '12</h4>

<ul>
    <li>Article 1</li>
    <li>Article 1</li>
    <li>Article 1</li>
</ul>

И т. Д.

Вот функция из моегоКонтроллер, который извлекает записи:

public function get_archives()

{

    $query = $this->db->query("
        SELECT id, 
        title, 
        date_published 
        FROM blog_post 
        ORDER BY date_published DESC
    ");

    if ($query->num_rows() > 0)

    {

        return $query->result();

    }

}

И затем я передал эти результаты моему представлению, используя $ archives.Значение date_published возвращает временную метку, например, 2012-01-13 18: 39: 53.

Каков наилучший подход к этому?

1 Ответ

3 голосов
/ 03 февраля 2012

Поскольку вы уже отсортировали их в хронологическом порядке, вы можете просто обойти их в цикле и печатать заголовок каждый раз, когда изменяется часть даты года и месяца.

Пример:

// get list of blog-items
$archives = $this->get_archives();

$last_year_month = "";

// traverse items in foreach loop
foreach($archives as $d) {
  // extract year and month
  $year_month = substr($d["date_published"], 0, 7);

  // if year and month has changed
  if ($year_month != $last_year_month) {
    // if not the first heading, close previous UL
    if ($last_year_month != "") echo "</ul>\n";

    $last_year_month = $year_month;

    echo "<h4>" . date("M", mktime(0, 0, 0, intval(substr($year_month, 5, 2)) - 1, 1, 1970)) . " " . substr($year_month, 2, 2) . "</h4>\n";

    // opening UL for next list
    echo "<ul>\n";
  }

  echo "  <li>" . $d["title"] . "</li>\n";
}
// only print if an UL was opened
if ($last_year_month != "") echo "</ul>\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...