本文实例展示了ThinkPHP自动填充实现无限级分类的方法,是ThinkPHP常用功能之一,非常具有实用价值。现将完整实例分享给大家,供大家参考。具体实现步骤如下:
表aoli_cate如下图所示:
一、action部分:
aoli/Home/Lib/Action/CataAction.class.php文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<?php
class CateAction extends Action{
function index(){
$cate =M( 'cate' );
$list = $cate ->field( "id,name,pid,path,concat(path,'-',id) as bpath" )->order( 'bpath' )->select();
foreach ( $list as $key => $value ){
$list [ $key ][ 'count' ]= count ( explode ( '-' , $value [ 'bpath' ]));
}
$this ->assign( 'alist' , $list );
$this ->display();
}
//添加栏目
function add(){
$cate = new CateModel();
if ( $vo = $cate ->create()){
if ( $cate ->add()){
$this ->success( '添加栏目成功' );
} else {
$this ->error( '添加栏目失败' );
}
//dump($vo);
} else {
$this ->error( $cate ->getError());
}
}
}
?>
|
二、模型部分:
aoli/Home/Lib/Model/CataModel.class.php文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<?php
class CateModel extends Model{ //对应数据库中的表aoli_cate
protected $_auto = array (
array ( 'path' , 'tclm' ,3, 'callback' ),
);
function tclm(){
$pid =isset( $_POST [ 'pid' ])?(int) $_POST [ 'pid' ]:0;
echo ( $pid );
if ( $pid ==0){
$data =0;
} else {
$list = $this ->where( "id=$pid" )->find();
$data = $list [ 'path' ]. '-' . $list [ 'id' ]; //子类的path为父类的path加上父类的id
}
return $data ;
}
}
?>
|
三、view视图部分
aoli/Home/Tpl/default/Cate/index.html页面如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
< form action = "__URL__/add" method = "post" >
请选择父级栏目:< select name = "pid" size = "20" >
< option value = "0" >根栏目</ option >
< volist name = "alist" id = "vo" >
< option value = "{$vo['id']}" >
< php >
for($i=0;$i<$vo['count'];$i++){
echo ' ';
}
</ php >
{$vo['name']}
</ option >
</ volist >
</ select >< br />
新的栏目名称:< input type = "text" name = "name" />< br />
< input type = "submit" value = "添加栏目" />
</ form >
|
相信本文所述实例对大家ThinkPHP程序设计有一定的参考价值。