You are here

function taxonomy_term_count_nodes in Drupal 6

Same name and namespace in other branches
  1. 4 modules/taxonomy.module \taxonomy_term_count_nodes()
  2. 5 modules/taxonomy/taxonomy.module \taxonomy_term_count_nodes()

Count the number of published nodes classified by a term.

Parameters

$tid: The term's ID

$type: The $node->type. If given, taxonomy_term_count_nodes only counts nodes of $type that are classified with the term $tid.

Return value

int An integer representing a number of nodes. Results are statically cached.

File

modules/taxonomy/taxonomy.module, line 963
Enables the organization of content into categories.

Code

function taxonomy_term_count_nodes($tid, $type = 0) {
  static $count;
  if (!isset($count[$type])) {

    // $type == 0 always evaluates TRUE if $type is a string
    if (is_numeric($type)) {
      $result = db_query(db_rewrite_sql('SELECT t.tid, COUNT(n.nid) AS c FROM {term_node} t INNER JOIN {node} n ON t.vid = n.vid WHERE n.status = 1 GROUP BY t.tid'));
    }
    else {
      $result = db_query(db_rewrite_sql("SELECT t.tid, COUNT(n.nid) AS c FROM {term_node} t INNER JOIN {node} n ON t.vid = n.vid WHERE n.status = 1 AND n.type = '%s' GROUP BY t.tid"), $type);
    }
    $count[$type] = array();
    while ($term = db_fetch_object($result)) {
      $count[$type][$term->tid] = $term->c;
    }
  }
  $children_count = 0;
  foreach (_taxonomy_term_children($tid) as $c) {
    $children_count += taxonomy_term_count_nodes($c, $type);
  }
  return $children_count + (isset($count[$type][$tid]) ? $count[$type][$tid] : 0);
}