ThinkPHP栏目无限分类

作者:刘老师

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']">
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  
            </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>

大功告成,是不是很简单

没有更多了 下一篇课程

学生登录