DeviceCatCheckbox.php
1.99 KB
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
namespace app\ht\modules\device\widgets;
use domain\device\DeviceCatRepository;
use yii\base\Widget;
use function in_array;
use function array_multisort;
class DeviceCatCheckbox extends Widget
{
public $selected;
public function run()
{
$nodes = DeviceCatRepository::getDeviceCatList();
$params = [
'data' => $this->buildTree($nodes, 0, $this->selected),
];
echo $this->render( 'device_cat_checkbox', $params);
}
/**
*
* 构造树数据
* @param $catDatas 一维数组
* @param int $parentId 父ID
* @param int $selectedId 默认选中
* @return array 返回树状的数组
*/
private function buildTree($catDatas, $parentId = 0, $selectedIds = [])
{
// 处理送过来的数据
$catDatas = (array)$catDatas;
$parentId = (int)$parentId;
/**
* 处理数据
*/
$treeChilds = [];
foreach ($catDatas AS $i => $catData) {
if ($catData['parent_id'] == $parentId) {
$child = [];
$child['id'] = $catData['id'];
$child['text'] = $catData['name'];
$child['sort_order'] = $catData['sort_order'];
if (in_array($catData['id'], $selectedIds)) {
$child['checked'] = true;
} else {
$child['checked'] = false;
}
// 删除已调用的数组
unset($catDatas[$i]);
// 回调数据
$buildTree = self::buildTree( $catDatas, $catData['id'], $selectedIds);
$child['children'] = !empty($buildTree) ? $buildTree : false;
$treeChilds[] = $child;
}
}
// 排序
$sortOrders = [];
foreach ($treeChilds as $child) {
$sortOrders[] = $child['sort_order'];
}
array_multisort($sortOrders, SORT_ASC, $treeChilds);
return $treeChilds;
}
}