多级分类显示问题

多级分类,存储在一个表中,通过parent_id进行关联,在GridView中如何显示相应的数据,并带有缩进的形式。

比如显示如下的形式:

新闻中心

–国内新闻

----山东新闻

------济南新闻

------青岛新闻

----山西新闻

------太原新闻

------大同新闻

–国际新闻

----美国新闻

----英国新闻

怎么处理好呢?

使用相应的model读取出所有数据,然后根据parent_id构建正确的层次关系,再用数据生成CArrayDataProvider共CGridView可以正常显示和分页。

开始用dataProvider的setData的方法设置数据,但是分页不起作用。

还有更好的解决办法吗?

只使用一条SQL的PHP无限分类的实现.





CREATE TABLE IF NOT EXISTS `xlxz_cat_name` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `fid` int(11) NOT NULL,

  `cat_name` varchar(128) NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0;

 

INSERT INTO `xlxz_cat_name` (`id`, `fid`, `cat_name`) VALUES

(1, 0, 'xlxz'),

(2, 0, 'no2'),

(3, 1, 'php mysql'),

(4, 1, 'c freebsd'),

(5, 1, 'linux ubuntu'),

(7, 1, 'python'),

(8, 1, 'unix c++'),

(9, 2, 'perl'),

(10, 2, 'shell'),

(11, 2, 'csh'),

(12, 2, 'bash'),

(13, 5, 'tsh'),

(14, 5, 'centos'),

(15, 5, 'iptables'),

(16, 5, 'postgresql'),

(17, 1, 'php freamwork'),

(18, 12, 'codeigniter'),

(19, 13, 'yii'),

(20, 12, 'thinkphp'),

(21, 13, 'pc-bsd'),

(22, 2, 'java'),

(23, 2, 'perl python c++/c java clisp');


<?php

$link   = mysql_connect( '127.0.0.1', 'root', '123456' ) or die( mysql_error() );//连接数据库服务器

          mysql_select_db( 'xlxz' );//选择数据库

          mysql_set_charset( 'utf8' );//设置字符编码

 

          $sql  = "SELECT * FROM xlxz_cate_name";//查询分类表

 

          $result   = mysql_query( $sql );

          $xlxz     = array();//初始化一个数组

          while( $row  = mysql_fetch_assoc( $result ) )

          {

                $xlxz[$row['fid']][$row['id']]  = $row['cat_name'];//创建分类数组

          }

            unset( $row );

 

          mysql_close( $link );//关闭数据库

 

          var_dump( $xlxz );//打印出分类数组

 

echo '-------------------------------------------' . "\n";

 

//递归函数

 

function for_category( $ss = array(), $a2 )

{

    echo "<ul>";

    foreach ( $ss as $k => $v )

    {

        if ( isset( $a2[$k] ) && is_array( $a2[$k] ) )

        {   echo "<li>$k $v";

            for_category( $a2[$k], $a2 );

            echo "</li>";

        }

        else{

            echo "<li>$k $v</li>";

        }

    }

    echo "</ul>";

}

 

for_category( $xlxz[0], $xlxz );



很详细,谢谢!