Upcoming events

The "upcoming events" block doesn't allow to display upcoming events by category.

Assuming that you event nodes are associated with a vocabulary, this snippet displays
the next three events for every category.

<?php
$limit
= 3;
$time = time() - (2 * 60 * 60);

function
get_events ($tid, $limit, $time) {
   
$result = db_query(db_rewrite_sql("SELECT n.nid, n.title, n.type, n.status, n.moderate, e.event_start FROM {node} n INNER JOIN {event} e ON n.nid = e.nid INNER JOIN {term_node} t ON t.nid = n.nid AND t.tid = %d WHERE n.status = 1 AND n.moderate = 0 AND e.event_start >= %d ORDER BY event_start"), $tid, $time);

    while ((
$node = db_fetch_object($result)) && $limit) {

        foreach (
module_implements('event_edit_upcoming') as $module) {
         
$function = $module .'_event_edit_upcoming';
         
$function($node);
        }
       
$ctype = module_invoke('flexinode', 'load_content_type', substr($node->type, 10));
       
$node->typename = ($ctype->name ? $ctype->name : $node->type);

        if (
$node->status) {
         
$items[] = theme('event_upcoming_item', $node);
         
$limit--;
        }
    }
    if(!
$items) {
        return;    
    }else {
         return
theme("event_upcoming_block", $items);
    }
}

$vid = 2;
$result = db_query("SELECT tid, name FROM {term_data} WHERE vid = %d", $vid);

while (
$t = db_fetch_object($result)) {
   
$events = get_events($t->tid,$limit,$time);
    if (
$events) {
        print
"<h2> $t->name </h2>";
        print
$events;
    }
}

print
theme('event_more_link', 'event');
?>

 
 

Drupal is a registered trademark of Dries Buytaert.