1. 程式人生 > >TinkPHP5 實現網站欄目下拉框

TinkPHP5 實現網站欄目下拉框

荊軻刺秦王

通常情況下,我們做網站的時候,經常會遇到這種一級欄目下面有二級目錄。今天我們就來看一下具體實現:

效果圖:

資料表結構:

欄目表:所有的欄目都在這個表裡面

既然這個欄目是公共的內容,我就把這個欄目控制器,放到一個 Base 控制器,然後繼承 Home 控制器,其他所有欄目的控制器都繼承 Base 控制器,這位一來網站所有欄目都可以顯示出來了。

 

控制器:

我們在 Base 控制器中查詢出所有的欄目

/**
     * 初始化方法
     * @author 劉耀威 <[email protected]>
     */
    protected function _initialize()
    {
        //查詢出一級欄目
        $result = DB::name('column_review')->field('id,pid,name,url,target')->order('pid asc,sort asc')->where('status','<>',0)->select();
        $arr_1 = array();
        $arr_2 = array();

        foreach($result as $i=>$a){
            if($a['pid']==0){
                $arr_1[$a['id']]=array(
                    'id'=>$a['id'],
                    'pid'=>$a['pid'],
                    'name'=>$a['name'],
                    'url'=>$a['url'],
                    'target'=>$a['target'],
                );
            }else{
                $arr_2[$a['pid']][]=array(
                    'id'=>$a['id'],
                    'pid'=>$a['pid'],
                    'name'=>$a['name'],
                    'url'=>$a['url'],
                    'target'=>$a['target'],
                );
            }
        }
        $this->assign('list1',$arr_1);
        $this->assign('list2',$arr_2);
        $this->assign('column1',$arr_1);
        $this->assign('column2',$arr_2);
    }

這裡我們將一級欄目和二級欄目分別放到兩個陣列中。

檢視:

<div class="dao">
                    <div class="dh2"><a href="/" class="dan">首頁</a></div>
                    {foreach name='list1' item="list1" key="key"}
                    <div class="dh2">
                    <div class="canpin">
                    <div><p href="javascript:void(0)" class="dan">{$list1.name}</p></div>
                    <div class="zicaidan">
                    <div><img src="__STATIC__/index/images/lanxian.png"></div>
                    {foreach name="list2" item="vo" key="k" }
                    {if ( $k == $key )}
                    {foreach name="vo" item="vo1" key="k1" }
                    <div class="zi"><a href="{$vo1.url}?id={$vo1.id}"  target="{$vo1.target}">{$vo1.name}</a></div>
                    {/foreach}
                    {/if}
                    {/foreach}
                    </div>
                    </div>
                    </div>
                    {/foreach}

                    <div class="change">
                        <div class="shuxian "><img src="__STATIC__/index/images/shuxian.png"></div>
                        <div class="zhong "><a href="javascript:void(0)" onclick="zh_tran('s')">簡體</a></div>
                        <div class="ying "><a href="javascript:void(0)" onclick="zh_tran('t')">繁體</a></div>
                        <div class="clear"></div>
                    </div>
                </div>

這裡 不用 volist 遍歷,而是使用 foreach 遍歷,因為 volist 不能滿足我們的需求,foreach 可以使用 key 值將兩個陣列做比較。

上面控制器中,我將一個數組給前臺賦值了兩次,是因為,我們的網站為了適配手機,所以寫了兩套模板,這個時候,我發現兩套模板不能公用一份資料,所以只能使控制器向前臺傳遞了兩次資料。

反正我是看著挺難受的,如果有同學有好的解決方法,可以留言討論