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

15.11.2010

В прошлом посте был создан архив материалов с помощью 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
Похожие записи

Комментарии

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

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

1) А как сделать то же самое, но для конкретного типа материала?
2) На какой странице найти материалы?

Добавить комментарий