TinkPHP5 实现网站栏目下拉框

版权声明:支持技术共享 https://blog.csdn.net/qq_38350907/article/details/84313027

荆轲刺秦王

通常情况下,我们做网站的时候,经常会遇到这种一级栏目下面有二级目录。今天我们就来看一下具体实现:

效果图:

数据表结构:

栏目表:所有的栏目都在这个表里面

既然这个栏目是公共的内容,我就把这个栏目控制器,放到一个 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 值将两个数组做比较。

上面控制器中,我将一个数组给前台赋值了两次,是因为,我们的网站为了适配手机,所以写了两套模板,这个时候,我发现两套模板不能公用一份数据,所以只能使控制器向前台传递了两次数据。

反正我是看着挺难受的,如果有同学有好的解决方法,可以留言讨论

猜你喜欢

转载自blog.csdn.net/qq_38350907/article/details/84313027