Всем здрасте!
Вот так как на картинки хочу вывести свои категории, но я че та запутался с foreach и голова уже худом идет.
Как видно на картинки там есть 1 Спойлер это названия категории 2 У категории есть подкатегория, то она без чекбокса, если у подкатегории есть свои подкатегории то они становятся чебоксами
Подскажите пожалуйста как это грамотно реализовать!
Пример моей бд как я храню свои категории:
id | parent_id | title
1 | 0 | Реклама
2 | 0 | Автоуслуги
3 | 1 | Настройка контекстной рекламы
4 | 3 | SEO оптимизация сайта
5 | 3 | Реклама в социальных сетях
6 | 1 | Услуги промоутеров
7 | 6 | Мерчендайзер
9 | 6 | Промоутер в супермаркет
10| 6 | Социологические опросы
11| 2 | Кузовной ремонт
12| 2 | Эвакуатор
13| 2 | Зарядка аккумулятора
...|...| ..........................
Как я хочу чтоб было
1menu
- menu
- menu
- menu
- menu
- menu
- menu
2menu
- menu
- menu
- menu
- menu
- menu
- menu
Заранее спасибо!
надо познать суть рекурсии и построения ей дерева. Для yii есть пример http://yiiframework.ru/forum/viewtopic.php?t=14520 Кратко суть показана в Как правильно реализовать построение древа через рекурсию?
<?php
namespace app\components; use yii\base\Widget; use app\models\Category;
class MenuWidget extends Widget{
public $tpl;
public $data;
public $tree;
public $menuHtml;
public function init(){
parent::init();
if( $this->tpl === null ){
$this->tpl = 'menu';
}
$this->tpl .= '.php';
}
public function run(){
$this->data = Category::find()->indexBy('id')->asArray()->all();
$this->tree = $this->getTree();
$this->menuHtml = $this->getMenuHtml($this->tree);
return $this->menuHtml;
}
protected function getTree(){
$tree = [];
foreach ($this->data as $id=>&$node) {
if (!$node['parent_id'])
$tree[$id] = &$node;
else
$this->data[$node['parent_id']]['childs'][$node['id']] = &$node;
}
return $tree;
}
protected function getMenuHtml($tree){
$str = '';
foreach ($tree as $category) {
$str .= $this->catToTemplate($category);
}
return $str;
}
protected function catToTemplate($category){
ob_start();
include __DIR__ . '/menu_tpl/' . $this->tpl;
return ob_get_clean();
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Имеется большой json-файлНа json_decode уходит до 4х секунд и такая скорость очень не устраивает, тем более что потребности именно парсить его и получать...
Имеется изолированная полностью контролируемая локальная сеть с машинами, вопросы безопасности не имеют значенияЕще есть несколько комовских...