Drupal默认是没有提供得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的深度,堪称神来之笔;不罗嗦了,代码如下:
ount(taxonomy_get_parents_all($tid));
官方讨论区
https://www.drupal.org/node/886526
总结下,实现同一个目的,使用Drupal的话,一般情况下都至少有两种以上方案供选择。这样对初学者来说是很大的挑战;但是一旦完成这个挑战,则会完成自身华丽丽的提升。
Drupal Taxonomy Term列表
Drupal的Taxonomy可以添加多个Term,实现把内容归类的功能,不过它还可以制作出最简单的数据列表。
在Taxonomy中点击Add vocabulary添加新的vocabulary,取名为Category
在Category中新增Term,取名为News
Create content新建一个类型为Story的内容
由于添加了Category vocabulary,所以在内容编辑页会多了一个Category的选项,这时选择News,就可以把内容归到News一类
通过以上过程之后,已经访问列表了,Path为taxonomy/term/% (%为ID值),全访问地址为http://www.domain.com/taxonomy/term/1。
ID是Term ID 的值。可以进行addmenu操作时把taxonomy/term/1作为path填写,来显示在menu上。
可以通过模板来定制term列表的外观,一般使用node.tpl.php这样的命名,如果要针对指定某个文章类型的模板,可以用node-story.tpl.php,story是一种文章类型,如果是blog,则模板为node-blog.tpl.php。(注:所有内容类型都是node)
另外page-node.tpl.php也是一个node模板,与node.tpl.php分别在于node.tpl.php指多个node的列表页,而page-node.tpl.php是单个node的模板,也就是内页(fullnode)或者编辑页(edit node)。
与CCK结合使用,可以添加新的字段到内容类型上,通过修改模板文件来输出新的字段,而且taxonomy term列表有分页功能,能满足大多数列表需求。
在content type的Manage fields里可以添加新字段,字段类型可以添加CCK字段插件来增加。Display fields用于决定Full node页与Teaser页的字段呈现方式。(注:Teaser即为taxonomyterm页)
如果需要给Teaser页添加自定义字段,可以在主题的template.php中添加mytemplate_preprocess_node函数,利用它可以在node.tpl.php及其相关模板输出前进行代码注入。也可以通过Content Template模块来定制输出模板,不过这方法对于开发者来说不便,也增加了模块数目。
缺点:taxonomy terms可以定制字段与呈现方式,它通过taxonomy_term_page函数查询数据并生成HTML输出,但它只可以指定TermID与深度,无法以更多的条件来定制数据。要得到更高级的数据列表,就只能用其他方法得到数据。
取代方法1:使用SQL提到查询数据,再使用theme函数调出模板输出到页面上。这个方法比较灵活,效率相对高,不过会增加相当多的代码量,如果列表定制过多不易于维护。
取代方法2:Views。Views是Drupal上数据提取解决方案,提取数据相当灵活。而且默认有几个Views List可用,其中的taxonomy_term就是用于取代taxonomyterm的列表。开启taxonomy_term后,会使node-view-taxonomy_term.tpl.php文件可用。也可以通过编辑taxonomyterm的views来修改数据排序等。
创造与魔法 安卓版v1.0.0750
创造与魔法是一款开放世界手游,在游戏中玩家可探索这个奇妙的世
创造与魔法修改版 最新版v1.0.0750
创造与魔法无限点券版是款探索冒险游戏,该款游戏的操作还是蛮自
战争与文明官方版本 安卓版v1.7.16
战争与文明是一款由上海邮通科技有限公司开发的战争策略游戏,这
迷你世界0元领皮肤无限迷你币版 最新安卓版v1.43.0
迷你世界0元购买皮肤版是这款开放沙盒冒险建造游戏的特殊破解版
创造与魔法无限经验版 安卓版v1.0.0750
创造与魔法无限经验版是款可以改造环境,整个游戏的自由度还是蛮