xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Архив со списком всех материалов, сгруппированных по месяцам, без помощи Views

Опубликовано в

В прошлом посте был создан архив материалов с помощью Views. В этом же покажу как можно сделать тоже самое на голом Drupal API:

/**
 * Реализация hook_menu()
 */
function mymodule_menu()
{
    $items['archive'] = array(
        'title' => 'Archive',
        'page callback' => 'mymodule_archive_page',
        'access arguments' => array('access content'),
        'type' => MENU_CALLBACK,
    );
 
    return $items;
}
 
/**
 * Page callback
 */
function mymodule_archive_page()
{
    // получаем список всех материалов
    $nodes = db_query("
        SELECT n.nid, n.title, n.created, ncs.comment_count FROM {node} n
        LEFT JOIN {node_comment_statistics} ncs ON n.nid = ncs.nid
        WHERE n.status = 1
        ORDER BY n.created DESC
    ");
 
    $groupedNodes = array();
    $output = '';
 
    // группируем по месяцу создания
    while ($node = db_fetch_object($nodes))
    {
        $groupedNodes[format_date($node->created, 'custom', 'Y, F')][] = l($node->title, 'node/' . $node->nid) . ' (' . $node->comment_count . ')';
    }
 
    // выводим сгруппированный список
    foreach ($groupedNodes as $date => $nodesForMonths)
    {
        $output .= theme('item_list', $nodesForMonths, $date);
    }
 
    return $output;
}

Пример работы.

В отличии от Views, работает довольно шустро и без кэширования.

Написанное актуально для Drupal 6.x
Похожие записи

Комментарии RSS

для полноты картины, есть еще такой модуль: http://drupal.org/project/archive

И куда этот текст вставлять? Добавить блок и назначить формат ввода php не работает

хорошее название статьи))) спасибо

НА друпал 7 у вас кода нет?

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании