taxonomy_get_tree($vid, $parent, $depth, $max_depth)
这个函数生成一个词汇表的层级化表示。参数$vid就是用来生成层级树的词汇表的词汇表ID。如果你不想为一个词汇表生成一个整树的话,而只想生成一个以$parent声明的词语ID为根的子树,这时你可以声明参数$parent。参数$depth是内部使用的参数,默认为-1.参数$max_depth是一个整数,用来指出返回树的层级数,它默认为NULL,这意味着所有的层级。这个函数返回了一个包含词语对象的数组,这里向词语对象添加了“depth” 和 “parents”键。“depth” 键是一个整数,用来指示词语在树中所处的层级;而“parents”键是一个数组,包含了词语的所有父词语的词语ID。例如,让我们为表14-3所列的词汇表得到相应的结果,它的词汇表ID为2:
$vid = 2;
print_r($taxonomy_get_tree($vid));
剖析:该函数中用到drupal_static();缓存了该函数执行的数据,因此,在submit函数中调用taxonomy_get_tree时拿到的是缓存时的数据,而不是最新的tree的数据,
解决办法:清空掉taxonomy_get_tree函数的缓存,如下:
function test_form_submit(&$form, &$form_state) {
//下面的3句话后,变量$tree ,拿到的才是submit之后,tree的最新数据。
$children = &drupal_static('taxonomy_get_tree', array(), TRUE);
$parents = &drupal_static('taxonomy_get_tree' . ':parents', array(), TRUE);
$terms = &drupal_static('taxonomy_get_tree' . ':terms', array(), TRUE);
$tree = taxonomy_get_tree($vid, 0, NULL, TRUE);
}