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

[讨论/交流] CI 2.0 无限级分类解决方案

[复制链接]
发表于 2011-6-27 12:05:43 | 显示全部楼层 |阅读模式
本帖最后由 幽蓝冰魄 于 2011-7-18 13:41 编辑

继续不说废话,直入主题,纯粹代码不解释。
MySQL 部分
SQL复制代码
 
DROP TABLE IF EXISTS `sort`;
CREATE TABLE `sort` (
  `SortID` SMALLINT(6) NOT NULL AUTO_INCREMENT,
  `SortName` VARCHAR(25) NOT NULL,
  `ParentID` SMALLINT(6) DEFAULT '0',
  `SortLevel` VARCHAR(25) DEFAULT NULL,
  `SortOrder` SMALLINT(6) DEFAULT '0',
  `IsShowID` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY  (`SortID`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
 
复制代码
Model 部分
PHP复制代码
// 获取文章分类
    function get_sort() {
        $this->db->select('SortID,SortName,ParentID,SortLevel');
        $this->db->order_by('SortLevel');
        $this->db->order_by('SortOrder', 'desc');
        $this->db->where('IsShowID', 1);
        return $data = $this->db->get('sort');
    }
 
复制代码

Controller 部分
PHP复制代码
 
    // 加载文章分类
    $data['sort'] = $this->M_sidebar->get_sort();
 
复制代码

View 部分
PHP复制代码
 
<?php
    $id = 1;
    foreach ($sort->result() as $item){
        $val = anchor('blog/sort/' . $item->SortID, $item->SortName);
        if ($id > ($_id = count(explode('|', $item->SortLevel)))) {
            echo str_repeat('</ul></li>', ($id - $_id)) . '<li class="cat-item">' . $val;
        } else if ($id < $_id) {
            echo '<ul  class="children"><li class="cat-item">' . $val;
        } else if ($id === $_id) {
            echo '</li><li class="cat-item">' . $val;
        }
        $id = $_id;
    }
?>
 
复制代码

css 部分
不提供
本例已经应用于 MeMo Blog (http://codeigniter.org.cn/forums/thread-9819-1-1.html) 中。


评分

参与人数 1威望 +2 收起 理由
exploit + 2 赞一个!

查看全部评分

发表于 2011-6-29 08:10:28 | 显示全部楼层
发表于 2011-7-15 13:13:45 | 显示全部楼层
你这个不用递归 好象不能无限分类啊?
 楼主| 发表于 2011-7-18 08:53:42 | 显示全部楼层
黑鹰 发表于 2011-7-15 13:13
你这个不用递归 好象不能无限分类啊?

确实没有使用递归,但是可以支持无限级别分类。具体可参照 MeMo Blog 的源码。
发表于 2011-7-18 13:30:24 | 显示全部楼层
学习
发表于 2011-9-18 17:08:09 | 显示全部楼层
值得学习....
发表于 2012-7-23 16:12:56 | 显示全部楼层
本帖最后由 dafa168 于 2012-7-23 16:23 编辑
PHP复制代码
 
  $id = 1;
    foreach ($sort->result() as $item){
        $val = anchor('manage/news_list' . $item->SortID, $item->SortName);
        if ($id > ($_id = count(explode('|', $item->SortLevel)))) {
            echo str_repeat('</ul>', ($id - $_id)) . '<li class="cat-item">' . $val . '</li>';
        } else if ($id < $_id) {
            echo '<ul  class="children"><li class="cat-item">' . $val . '</li>';
        } else if ($id === $_id) {
            echo '<li class="cat-item">' . $val . '</li>'; //输出一级分类
        }
        $id = $_id;
    }
 
复制代码

感谢楼主分享,我正愁做这个呢 呵呵
不过,我试过了,视图部分这样输出 html代码是完整的
这个分类方法,应该叫做亲戚关系,很好用,推荐大家使用!

本版积分规则