版权声明:支持技术共享 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 值将两个数组做比较。
上面控制器中,我将一个数组给前台赋值了两次,是因为,我们的网站为了适配手机,所以写了两套模板,这个时候,我发现两套模板不能公用一份数据,所以只能使控制器向前台传递了两次数据。
反正我是看着挺难受的,如果有同学有好的解决方法,可以留言讨论