function taxonomy_get_tree in Drupal 5
Same name and namespace in other branches
- 4 modules/taxonomy.module \taxonomy_get_tree()
- 6 modules/taxonomy/taxonomy.module \taxonomy_get_tree()
- 7 modules/taxonomy/taxonomy.module \taxonomy_get_tree()
Create a hierarchical representation of a vocabulary.
Parameters
$vid: Which vocabulary to generate the tree for.
$parent: The term ID under which to generate the tree. If 0, generate the tree for the entire vocabulary.
$depth: Internal use only.
$max_depth: The number of levels of the tree to return. Leave NULL to return all levels.
Return value
An array of all term objects in the tree. Each term object is extended to have "depth" and "parents" attributes in addition to its normal ones. Results are statically cached.
9 calls to taxonomy_get_tree()
- forum_get_forums in modules/
forum/ forum.module - Returns a list of all forums for a given taxonomy id
- forum_overview in modules/
forum/ forum.module - Returns an overview list of existing forums and containers
- forum_submit in modules/
forum/ forum.module - Implementation of hook_submit().
- taxonomy_form_all in modules/
taxonomy/ taxonomy.module - Generate a set of options for selecting a term from all vocabularies.
- taxonomy_form_term in modules/
taxonomy/ taxonomy.module
File
- modules/
taxonomy/ taxonomy.module, line 988 - Enables the organization of content into categories.
Code
function taxonomy_get_tree($vid, $parent = 0, $depth = -1, $max_depth = NULL) {
static $children, $parents, $terms;
$depth++;
// We cache trees, so it's not CPU-intensive to call get_tree() on a term
// and its children, too.
if (!isset($children[$vid])) {
$children[$vid] = array();
$result = db_query(db_rewrite_sql('SELECT t.tid, t.*, parent FROM {term_data} t INNER JOIN {term_hierarchy} h ON t.tid = h.tid WHERE t.vid = %d ORDER BY weight, name', 't', 'tid'), $vid);
while ($term = db_fetch_object($result)) {
$children[$vid][$term->parent][] = $term->tid;
$parents[$vid][$term->tid][] = $term->parent;
$terms[$vid][$term->tid] = $term;
}
}
$max_depth = is_null($max_depth) ? count($children[$vid]) : $max_depth;
if ($children[$vid][$parent]) {
foreach ($children[$vid][$parent] as $child) {
if ($max_depth > $depth) {
$term = drupal_clone($terms[$vid][$child]);
$term->depth = $depth;
// The "parent" attribute is not useful, as it would show one parent only.
unset($term->parent);
$term->parents = $parents[$vid][$child];
$tree[] = $term;
if ($children[$vid][$child]) {
$tree = array_merge($tree, taxonomy_get_tree($vid, $child, $depth, $max_depth));
}
}
}
}
return $tree ? $tree : array();
}