本模型采用 `adminCategoryTableTree` 方法
>说明:此模型需要用到 `Tree` 类。有关 `Tree` 类的使用会在附件中说明并使用!
思路:这里我们只需要遍历数组,再形成带有管理功能的数组。利用`Tree`类`init`方法初始化,再用`getTree`方法获取遍历数组即可!根本不再需要用更多的方法来操作了!
是不是很简单的呢!
这里可以根据实际情况将 `$tpl` 进行默认更改!
## 代码
这里先介绍代码,下边会讲到一些关键性知识。
```
<?php
namespace app\agent\model;
use think\Model;
use tree\Tree;
class AgentCategoryModel extends Model
{
/**
* 获取表格树
* @param int|array $currentIds
* @param string $tpl
* @return string
*/
public function adminCategoryTableTree($currentIds = 0, $tpl = '')
{
$where = ['delete_time' => 0];
$categories = $this->order("list_order ASC")->where($where)->select()->toArray();
if (!is_array($currentIds)) {
$currentIds = [$currentIds];
}
$newCategories = [];
foreach ($categories as $item) {
$item['checked'] = in_array($item['id'], $currentIds) ? "checked" : "";
$item['url'] = url('agent/List/index', ['id' => $item['id']]);;
$item['str_action'] = '<a href="' . url("AdminCategory/add", ["parent" => $item['id']]) . '">添加子分类</a> <a href="' . url("AdminCategory/edit", ["id" => $item['id']]) . '">' . lang('EDIT') . '</a> <a class="js-ajax-delete" href="' . url("AdminCategory/delete", ["id" => $item['id']]) . '">' . lang('DELETE') . '</a> ';
array_push($newCategories, $item);
}
$tree = new Tree();
$tree->icon = [' │', ' ├─', ' └─'];
$tree->nbsp = ' ';
$tree->init($newCategories);
if (empty($tpl)) {
$tpl = "<tr>
<td><input name='list_orders[\$id]' type='text' size='3' value='\$list_order' class='input-order'></td>
<td>\$id</td>
<td>\$spacer <a href='\$url' target='_blank'>\$name</a></td>
<td>\$description</td>
<td>\$str_action</td>
</tr>";
}
$treeStr = $tree->getTree(0, $tpl);
return $treeStr;
}
}
```
## 关键知识一
这里关键的是怎样把 `$categories` 更改为 `$newCategories` 数组。
那么这两种的数据分别是什么呢?
`$categories` 是单纯的数组,如图所示:
![mark](http://olbhidnfa.bkt.clouddn.com/blog/20171014-224446553.png)
`$newCategories` 是具有操作性的数组,如图所示:
![mark](http://olbhidnfa.bkt.clouddn.com/blog/20171014-224553397.png)
## 关键知识二