作者:刘老师
Thinkphp栏目无限分类
栏目无限分类有很多种做法,虽然递归
实现起来比较麻烦,递归函数十分容易写错,但目前最好用无限分类还是递归
方法。
数据库栏目表就那两个字段,一个id
(自己的id),一个pid
(当前栏目父栏目的id,如果是顶级栏目,pid为0),自己定义哦.
下面是实际代码
<?php
class CategoryAction extends Action
{
public $cate;
public $alist;
public $treeList = array(); //存放无限分类结果如果一页面有多个无限分类
//这个方法下次单独拿出去
public function _initialize()
{
$this->cate = M('Category');
$list = $this->cate->order('`pid` asc, `order` asc, id asc')->select();
$this->alist = $this->tree($list);
}
/**
* 无限级分类
* @access public
* @param Array $data //数据库里获取的结果集
* @param Int $pid
* @param Int $count //第几级分类
* @return Array $treeList
*/
public function tree(&$data, $pid = 0, $count = 1)
{
foreach ($data as $key => $value) {
if ($value['pid'] == $pid) {
$value['count'] = $count;
$this->treeList [] = $value;
unset($data[$key]);
$this->tree($data, $value['id'], $count + 1);
}
}
return $this->treeList;
}
}
这样你就可以在自己的代码中
$this->assign('alist', $this->alist);
模板部分
<volist name="alist" id="vo">
<tr>
<td class='name'>
<for start="1" end="$vo['count']">
</for>
<a href="#" target="_blank" title="ID={$vo.id}"
class="tip-top">
{$vo['name']}
</a>
</td>
<input type="hidden" value="{$vo.id}" class="id" name="id"/>
</tr>
</volist>
大功告成,是不是很简单