首先要根据当前的 id 获取到它所有顶级栏目:
要从顶级栏目到二级栏目,所以要倒序排列下:array_reverse();
/** * 传递一个分类ID 返回该分类的所有父级分类 */ function get_all_parent($array,$id){ $arr = array(); foreach($array as $v){ if($v['id'] == $id){ $arr[] = $v; $arr = array_merge($arr,get_all_parent($array,$v['pid'])); } } return $arr; }
定义标签:(考虑到每次访问这个都要去读这个,会很耗性能,所以做了缓存处理)
<?php namespace CommonTag; use ThinkTemplateTagLib; class My extends TagLib{ // 定义标签 // 参考文章 : http://www.thinkphp.cn/topic/34758.html protected $tags = array( 'location'=> array('attr'=>'cid') ); // location 标签 public function _location($attr,$content){ $cid = $attr['cid']; $str = <<<str <?php $cid = {$cid}; if(S('location_'.$cid)){ $_location_result = S('location_' . $cid); }else{ $_location_category = M('category')->select(); $_location_result = array_reverse(get_all_parent($_location_category,$cid)); S('location_'.$cid); } foreach($_location_result as $v): extract($v); ?> str; $str .= $content; $str .= '<?php endforeach; ?>'; return $str; } };
具体使用:
<div id='location'> <a href="{:U('List/index')}">全部分类</a> <if condition="isset($_GET['id'])"> > <location cid='$_GET["id"]'> <if condition="$id == $_GET['id']"> {$name} <else/> <a href="{:U('List/index',array('id'=>$id))}">{$name}</a> > </if> </location> </if> </div>