В прошлом посте был создан архив материалов с помощью 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
Похожие записи
- Как работает опция "Aggregation type" в настройках полей Views при включённой агрегации
- Views сортировка по выражению/условию/формуле
- Views фильтр "товар имеет опубликованную вариацию"
- Модуль EAV Field — хранение большого числа характеристик сущности в одном поле
- Добавить сторонней контент сущности своё базовое поле (base field)
Комментарии
для полноты картины, есть еще такой модуль: http://drupal.org/project/archive
И куда этот текст вставлять? Добавить блок и назначить формат ввода php не работает
http://xandeadx.ru/blog/drupal/256
хорошее название статьи))) спасибо
НА друпал 7 у вас кода нет?
1) А как сделать то же самое, но для конкретного типа материала?
2) На какой странице найти материалы?
Добавить комментарий