用yii框架做了一个无限极分类,主要的数组转换都是粘贴的别人的代码,但还是不要脸的写出来,方便以后自己看
用的是递归,不是path路径
控制器:
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
30
31
32
33
34
35
36
37
38
|
protected function subtree( $arr , $id =0, $lev =1){
$subs = array (); // 子孙数组
foreach ( $arr as $v ) {
if ( $v [ 'parent_id' ] == $id ) {
$v [ 'lev' ] = $lev ;
$subs [] = $v ; // 举例说找到array('id'=>1,'name'=>'安徽','parent'=>0),
$subs = array_merge ( $subs , $this ->subtree( $arr , $v [ 'cat_id' ], $lev +1));
}
}
return $subs ;
}
public function actionCreate()
{
$model = new EcsCategory();
$query = new \yii\db\Query();
$query ->select( '*' )
->from( 'ecs_category' );
$command = $query ->createCommand();
$res = $command ->queryAll();
$tree = $this ->subtree( $res ,0,1);
foreach ( $tree as $k => $v ) {
$tree [ $k ][ 'new_cat_name' ]= str_repeat ( '--' , $v [ 'lev' ]). $v [ 'cat_name' ]. str_repeat ( '--' , $v [ 'lev' ]); //str_repeat — 重复一个字符串
}
$arr = array (
'new_cat_name' => '*分类' ,
'cat_id' =>0
);
array_unshift ( $tree , $arr );
if ( $model ->load(Yii:: $app ->request->post()) && $model ->save()) {
return $this ->redirect([ 'view' , 'id' => $model ->cat_id]);
} else {
return $this ->render( 'create' , [
'model' => $model ,
'data' => $tree ,
]);
}
}
|
视图:
1
2
3
|
use \yii\helpers\ArrayHelper;
<?= $form ->field( $model , 'parent_id' )->dropDownList(ArrayHelper::map( $data , 'cat_id' , 'new_cat_name' ) ,[ 'prompt' => '请选择父级分类' ]) ?>
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。