Drupal并没有提供API来获得term的dpeth;但是我们仍然有方法获得。本文分享两种方法,供有需要读者自行选择。
1:自行构造函数,通过数据库查询方式来获得。
function get_term_depth($tid) {
$limit = 9;
$depth = 1;
while($parent = db_query('SELECT parent FROM {taxonomy_term_hierarchy} WHERE tid = :tid', array(':tid' => $tid))->fetchField()) {
$depth++;
$tid = $parent;
if($depth > $limit) {
break;
}
}
return $depth;
}2:利用ctools
ctools有个子模块,叫做term_depth,估计大部分人都没注意过这个模块。这个模块提供一个隐藏的函数_term_depth,也可以用来计算term的depth。
经过一番摸索,下面提供可以调用该函数的方法。
ctools_plugin_load_function('ctools', 'access', 'term_depth', '_term_depth');
$tid = 2;
echo _term_depth($tid);如下是ctools提供的_term_depth函数原型;用到了静态变量与递归函数,兼顾通用性与性能之间的平衡,值得借鉴。
function _term_depth($tid) {
static $depths = array();
if (!isset($depths[$tid])) {
$parent = db_select('taxonomy_term_hierarchy', 'th')
->fields('th', array('parent'))
->condition('tid', $tid)
->execute()->fetchField();
if ($parent == 0) {
$depths[$tid] = 1;
}
else {
$depths[$tid] = 1 + _term_depth($parent);
}
}
return $depths[$tid];
}完成此文后,经过调查,发现还有第三种方式获得term的深度,堪称神来之笔;不罗嗦了,代码如下:
count(taxonomy_get_parents_all($tid));
同时也发现相关讨论,链接如下,供参考。
https://www.drupal.org/node/886526
总结下,实现同一个目的,使用Drupal的话,一般情况下都至少有两种以上方案供选择。这样对初学者来说是很大的挑战;但是一旦完成这个挑战,则会完成自身华丽丽的提升。