问答项目---面包削导航的处理!

首先要根据当前的 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>

 

posted @ 2017-08-30 21:51  帅到要去报警  阅读(281)  评论(0编辑  收藏  举报