多级分类,存储在一个表中,通过parent_id进行关联,在GridView中如何显示相应的数据,并带有缩进的形式。
比如显示如下的形式:
新闻中心
–国内新闻
----山东新闻
------济南新闻
------青岛新闻
----山西新闻
------太原新闻
------大同新闻
–国际新闻
----美国新闻
----英国新闻
怎么处理好呢?
多级分类,存储在一个表中,通过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 );
很详细,谢谢!