taxonomy_get_tree
modules/taxonomy/taxonomy.module, строка 820
- Версии
- 5 – 6
taxonomy_get_tree($vid, $parent = 0, $depth = -1, $max_depth = NULL)
Создает иерархическое представление словаря.
Параметры
$vid
Для какого словаря создавать дерево.
$parent
ID термина, под которым создавать дерево. Если 0, то создавать дерево всего словаря.
$depth
Только для внутреннего пользования.
$max_depth
Количество уровней дерева, которое возвращается. Оставьте NULL
, чтобы вернуть все уровни.
Возвращаемое значение
Массив всех объектов терминов в дереве. Каждый объект термина дополнены атрибутами 'depth'
и 'parents'
, которых обычно нет. Результаты статически кешируются.
Код
<?php
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;
$tree = array();
if ($max_depth > $depth && !empty($children[$vid][$parent])) {
foreach ($children[$vid][$parent] as $child) {
$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 (!empty($children[$vid][$child])) {
$tree = array_merge($tree, taxonomy_get_tree($vid, $child, $depth, $max_depth));
}
}
}
return $tree;
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии