1. 程式人生 > >問答項目---面包削導航的處理!

問答項目---面包削導航的處理!

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‘])">&nbsp;&gt;&nbsp;
        <location cid=‘$_GET["id"]‘>
            <if condition="$id == $_GET[‘id‘]">
                {$name}
            <else/>
                <a href="{:U(‘List/index‘,array(‘id‘=>$id))}">{$name}</a>&nbsp;&gt;&nbsp;
            </if>
        </location>
    </if>
</div>

問答項目---面包削導航的處理!