問答項目---面包削導航的處理!
阿新 • • 發佈:2017-08-30
array 根據 lib .cn reverse 項目 topic taglib 全部
首先要根據當前的 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 Common\Tag; use Think\Template\TagLib; 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>
問答項目---面包削導航的處理!