Код: Выделить всё
[
[1] => [
'id' => 1,
'name' => 'Категория1',
'children' => [
[2] => [
'id' => 2,
'name' => 'Подкатегория2',
'children' => [
[3] => [
'id' => 3,
'name' => 'Подподкатегория3'.
'children' => [
...
]
]
]
]
]
]
]
Или может есть какие-то более удобные инструменты для этих целей?
Код: Выделить всё
<?php
namespace yii\helpers;
use common\models\query\CategoryQuery;
use Yii;
/**
* Class RadioTreeBuilder
*
* @package yii\helpers
*/
class RadioTreeBuilder
{
/**
* @var
*/
private $_id;
/**
* @var
*/
private $_parent_id;
/**
* @param $model
* @param int $exception_id
* @return string
*/
public function __invoke($model, $exception_id = 0)
{
/* @var $model CategoryQuery */
$model = new $model();
if ((int)$exception_id !== 0) {
$entity = $model->one((int)$exception_id);
if ($entity !== false) {
$this->_id = $entity->id;
$this->_parent_id = $entity->parent_id;
}
}
return $this->render($model->getListAsTree(0, $exception_id));
}
/**
* @param array $rowset
* @return string
*/
protected function render(array $rowset)
{
$tree
= '<ul class="admin-form-radio-tree"><li>' .
'<label><input type="radio" value="0" name="pid" checked="checked"/>'.Yii::t('common', 'Catalog').'</label>' .
'</li>';
$tree .= $this->combine($rowset);
$tree .= '</ul>';
return $tree;
}
/**
* @param array $rowset
*
* @return string
*/
protected function combine(array $rowset = array())
{
$list = '';
if (!empty($rowset)) {
foreach ($rowset as $item) {
// if ($this->_id != $item['id']) {
$checked = $this->_parent_id == $item['id'] ? ' checked' : '';
$list.= '<li><label><input type="radio" value="' . $item['id'] . '" name="parent_id"' . $checked . '/>' . $item['name'] .'</label>';
if (!empty($item['children'])) {
$list .= '<ul>';
$list .= $this->combine($item['children']);
$list .= '</ul>';
}
$list .= '</li>';
// }
}
}
return $list;
}
}
Код: Выделить всё
<?= \yii\helpers\RadioTreeBuilder::getRadioTree('Category', $model->id); ?>
Код: Выделить всё
Class 'yii\helper\RadioTreeBuilder' not found