无限分类及结合smarty输出的问题

#1 prince

dump出的分类结果集如下:
[arr] => Smarty_Variable Object
                                (
                                    [value] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [id] => 1
                                                    [p_id] => 0
                                                    [classname] => 产品
                                                    [child] => Array
                                                        (
                                                            [0] => Array
                                                                (
                                                                    [id] => 3
                                                                    [p_id] => 1
                                                                    [classname] => 打印机
                                                                    [child] => Array
                                                                        (
                                                                            [0] => Array
                                                                                (
                                                                                    [id] => 13
                                                                                    [p_id] => 3
                                                                                    [classname] => 针式
                                                                                )

                                                                            [1] => Array
                                                                                (
                                                                                    [id] => 14
                                                                                    [p_id] => 3
                                                                                    [classname] => 激光
                                                                                )

                                                                            [2] => Array
                                                                                (
                                                                                    [id] => 15
                                                                                    [p_id] => 3
                                                                                    [classname] => 喷墨
                                                                                )

                                                                        )

                                                                )

                                                        )

                                                )

                                            [1] => Array
                                                (
                                                    [id] => 2
                                                    [p_id] => 0
                                                    [classname] => 服务
                                                    [child] => Array
                                                        (
                                                            [0] => Array
                                                                (
                                                                    [id] => 4
                                                                    [p_id] => 2
                                                                    [classname] => 硬件服务
                                                                    [child] => Array
                                                                        (
                                                                            [0] => Array
                                                                                (
                                                                                    [id] => 7
                                                                                    [p_id] => 4
                                                                                    [classname] => 电脑硬件
                                                                                    [child] => Array
                                                                                        (
                                                                                            [0] => Array
                                                                                                (
                                                                                                    [id] => 9
                                                                                                    [p_id] => 7
                                                                                                    [classname] => 硬件类
                                                                                                )

                                                                                        )

                                                                                )

                                                                        )

                                                                )

                                                            [1] => Array
                                                                (
                                                                    [id] => 5
                                                                    [p_id] => 2
                                                                    [classname] => 软件服务
                                                                )

                                                        )

                                                )

                                            [2] => Array
                                                (
                                                    [id] => 16
                                                    [p_id] => 0
                                                    [classname] => 新闻
                                                    [child] => Array
                                                        (
                                                            [0] => Array
                                                                (
                                                                    [id] => 18
                                                                    [p_id] => 16
                                                                    [classname] => 行业新闻
                                                                )

                                                        )

                                                )

                                        )

                                    [nocache] =>
                                    [scope] => 0
                                )

                        )
如何在smarty模板中输出显示成这种效果:

select.jpg

2011-06-03 22:42:45

#2 prince

用section和foreach反复调试试了几天都得不到正确的结果

2011-06-03 22:52:18

#3 jake

这种无限分类,要显示成那种“平板”的方式,要有两个前提条件:
1. 在数据中加入当前是第几层次的字段,在数据表内或计算出来,这样就可以显示成:一级没有,二级加一个“-”,三级加两个“--”
2. 在smarty内做的递归的函数,递归地把当前多级分类的数组,递归回只有一级数组来显示。

补充一下,经常看到的JS树型结构或多级菜单结构,虽然输入的数据可以是多级的。但是在JS中也同样进行了上面的计算和处理,最终才会显示。所以,无限多级分类的优点不在于“直接显示”,而是在于“分类显示”

2011-06-04 06:56:03

#4 prince

回复 3 jake


    思路的确是这样的。
1. 在数据中加入当前是第几层次的字段,在数据表内或计算出来,这样就可以显示成:一级没有,二级加一个“-”,三级加两个“--”

2011-06-04 12:16:52

#5 feng157aaa

用数组循环来弄吧,老大的方法已经很好了

2011-06-07 15:55:02

#6 prince

如何计算数组中的键名是第几层次的?弄了几天没弄出来,最好是在模板中用smarty处理

2011-06-08 11:44:07

#7 jake

只能一项一项地计算自己的级别(递归计算)。很繁琐,对吧。

这就是为什么无限分类要用到左右值或者ID路径等等方式的原因。

目前你的问题,如果按一般的无限分类思路是只有一个父ID,那样不足够。你最好加上“当前层次”的字段。

用ID路径会更容易,也就是加上“ID路径”的字段,这样直接计算ID路径本身就可以知道是几级的内容。

2011-06-08 12:40:20

#8 gnipt

我也是遇到这个问题啊 不知楼主解决了没啊? 现在 只能 手工 嵌套 几层用啊。 没办法 实现无限嵌套!

2011-08-06 08:46:57

#9 kenzone

jake 能说说具体 ID路径 的内容是什么么?

2011-08-12 09:09:50

#10 jake

ID路径
http://speedphp.blog.51cto.com/1904268/625121

2011-08-12 09:21:52

#11 kenzone

回复 10 jake


   受教了~~ 感谢 Jake ~

2011-08-12 12:24:09