用户
 找回密码
 入住 CI 中国社区
搜索
查看: 6737|回复: 7
收起左侧

[视图] 获取无限级分类怎样处理最好

[复制链接]
发表于 2009-4-27 02:39:51 | 显示全部楼层 |阅读模式
现在我写的是在model里用一个方法递归,先贴代码.
在模型里定义
  function getCateSelect($parentId,$level)  //$level为分类深度,以区分不同分类的缩进
    {
       $level++;
//parentId字段值为某条记录的id值时代表此类直属哪个分类
       $this->db->where('parentId',$parentId);      
       $query=$this->db->get('ci_nav');
      
       if($query->num_rows() > 0)
       {
           foreach ($query->result() as $row)
           {
            echo "<option value='$row->id'>";
            for($i=1;$i<$level;$i++)
            {
                echo "  ";
            }
            echo  $row->navName;
            echo "</option>";            
            $this->getCateSelect($row->id,$level);
           }           
       }
    }
在视图里直接<?php $this->Model_nav->getCateSelect(0,1);?>

现在的应用是生成分类的下拉表.但是觉得这样处理扩展性很不好,因为都是直接在model用echo输出html代码,想弄成对象或是数组输出,这样就不只限于生成下拉表了.对象输出,return $query->result()就行了,但有个递归在,可能是编程思想欠佳,按自己的想法return $query->result()却只获得第一层分类.请教下有此方面经验的朋友.
发表于 2009-4-27 10:11:11 | 显示全部楼层
把所有用 echo 输出的内容用 数组 替代不就可以放到视图输出了吗
 楼主| 发表于 2009-4-27 13:10:59 | 显示全部楼层
本帖最后由 乌有 于 2009-4-27 13:35 编辑

新手困扰总是多,很谢谢每次Hex的帮助.
这样是不是要用多维数组了.
对多维数组的操作不了解.
输出的时候如何遍历.

PS:解决了,遍历方法原来是一样就可以了.在model里定义一个为数组变量的属性,然后在方法中赋值就可以了.
发表于 2009-4-27 14:03:46 | 显示全部楼层
能帮助大家解决问题,这就是 CI 中国社区应该做的事情,呵呵。
发表于 2011-7-15 13:52:32 | 显示全部楼层
乌有 发表于 2009-4-27 13:10
新手困扰总是多,很谢谢每次Hex的帮助.
这样是不是要用多维数组了.
对多维数组的操作不了解.

怎么解决的,也不贴上原码。我也是同样的问题。
发表于 2011-11-7 16:00:06 | 显示全部楼层
出个带注释的源码,发过来看看
发表于 2011-11-21 13:51:24 | 显示全部楼层
我的处理方法是用一条SQL查询出所有要排序的内容,另外写一个方法对数据进行排名返回一个数组给视图。
发表于 2011-11-22 17:03:28 | 显示全部楼层
看了几遍了,还是没出来结果

本版积分规则