第九区

一个程序员的经验笔记

三级分类生成jqueryui的jquery.menu字串

| 暂无评论

之前一直用无限级分类的,这次刚好一个项目适合,试了一下三级分类。jquery.menu所需的是一个标准的ul/li字串,所以这个字串也适合于多种javascript的tree插件。

最后生成的效果如图:

jqueryui三级菜单

用到的部门数据库:

部门数据表

部门的数据表结构

生成menu的js代码:

    <h1><span>当前部门:</span><span id="departmentName">所有部门</span></h1>
<ul class="menu menuDepartment" style="z-index: 900; position:absolute;">
    <li><a>选择部门</a>
        <ul>
    <li><a href="#" departmentId ="0">所有部门</a></li>
        <?=$this->menu?>
        </ul></li>
</ul>

输出$this->menu的控制器就不帖了,没有什么必要,生成这个$this->menu字串的工作是在model里完成的。

<?php
class Application_Model_DbTable_Department extends Zend_Db_Table_Abstract
{
    protected $_name = 'department';
    /**
     * 获得所有部门
     * @return rowset
     */
    public function getAll(){
        $rs=$this->fetchAll();
        $array=array();
        foreach($rs as $row){
            $array[$row['id']]=$row;
        }
        return $array;
    }

    /**
     * 获得所有下级子部门的id
     * @param int $id
     * @return string ids
     */
    public function getChildIds($id){
        $rows=$this->find($id);
        $row=$rows[0];
        if($row->level==0){
            $where='topid='.$id;
        }elseif($row->level==1){
            $where='fid='.$id;
        }else{
            $where='id='.$id;
        }
        $rs=$this->fetchAll($where);
        $arrayIds=array();
        if(empty($arrayIds)){
           return 0; 
        }
        foreach($rs as $row){
            $arrayIds[]=$row['id'];
        }
        $ids=  implode(',', $arrayIds);
        return $ids;
    }

    /**
     * 获得一个树状数组
     */
    public function getTreeArray(){
        $rs=$this->fetchAll()->toArray();
        $array=array();
        foreach($rs as $row){
            if($row['level']==0){
                $row['children']=array();
                $array[$row['id']]=$row;
            }
        }

        foreach($rs as $row){
            if($row['level']==1){
                $row['children']=array();
                $array[$row['topid']]['children'][$row['id']]=$row;
            }
        }

        foreach($rs as $row){
            if($row['level']==2){
                $row['children']=array();
                $array[$row['topid']]['children'][$row['fid']]['children'][$row['id']]=$row;
            }
        }

        return $array;
    }

    /**
     * 返回用于jquery.menu的字串
     * 该字串同时适用于多种tree插件
     * @return string
     */
    public function getMenuString(){
        $string='';
        $array=$this->getTreeArray();
        foreach($array as $key=>$level0){
            $string.='<li><a href="#" departmentId='.$level0['id'].'>'.$level0['name'].'</a>';
            if(!empty($level0['children'])){
                $string.='<ul>';
                foreach($level0['children'] as $level1){
                    $string.='<li><a href="#" departmentId='.$level1['id'].'>'.$level1['name'].'</a>';
                    if(!empty($level1['children'])){
                        $string.='<ul>';
                        foreach($level1['children'] as $level2){
                            $string.='<li><a href="#" departmentId='.$level2['id'].'>'.$level1['name'].'</a></li>';
                        }
                        $string.='</ul>';
                    }
                    $string.='</li>';
                }
                $string.='</ul>';
            }
            $string.='</li>';
        }
        return $string;
    }
}

 

发表评论

*为必填字段!