1 of 6

Лабораторна робота №5

Робота з багаторівневою структурою даних

Проект: PHP-Advanced

2 of 6

Завдання 1 (PHP). Дано масив категорій

https://gist.github.com/alexanderkuzmenko/9da6b08b826d62df57cf4ef1cbcfc80a

3 of 6

Побудувати дерево категорій та вивести його багаторівневим списком

Прохід по масиву для формування дерева категорій був лінійними (використовувався лише один цикл)

Другий крок - рекурсивно відобразити дерево у вигляді списку

4 of 6

Завдання 2 (Yii2 Advanced). Створити структуру таблиць даних, задати правильно типи, індекси, зв'язки

  • Таблиця department (відділи)
  • Таблиця department_type (типи відділів)

department

department_id

department_name

parent_id

type_id

1

Рада директорів

 0

1

2

Головна виконавча рада

1

1

3

Операційний центр

2

2

4

Фінансовий центр

2

2

5

Центр розробки

2

2

6

Відділ кадрів

3

3

7

Відділ продажів

3

3

8

Маркетинговий центр

2

2

9

Відділ аудиту

4

3

10

Відділ податків

4

3

11

Казначейський відділ

4

3

12

Рекламний відділ

8

3

13

Відділ аналізу потреб споживачів

8

3

14

Відділ зв'язків з громадськістю

8

3

15

Відділ розробки

5

3

16

Відділ досліджень

5

3

17

Відділ внутрішньої інфраструктури

5

3

18

Відділ статистики

3

3

19

Відділ ризиків

4

3

department_type

type_id

name

1

Board

2

Center

3

Department

5 of 6

Завдання 2. За даними із завдання 2 розробити сторінку з представленням структури організації у вигляді ієрархії за таким зразком

  • Самостійний пошук і використання засобів (JS-бібліотеки) для візуалізації діаграми - є однією з умов завдання
  • Кольори відділів на діаграмі повинні залежати від типу відділу

Не обов'язково, але бажано:

  • Фігури відділів типу board та center розміщуємо горизонтально
  • Фігури відділів типу departments - вертикально

6 of 6

Завдання 3. Створити віджет для виводу списку категорій.

Шаблон віджету https://gist.github.com/alexanderkuzmenko/61c3c94049f5db2fae60522a1f9771a0

Категорії повинні виводитись у вигляді акордеону, або випадного списку select в залежності від назви темплейту, який ми передаємо в віджет:

<?= \app\components\MenuWidget::widget(['tpl' => 'menu'])?>

<?= \app\components\MenuWidget::widget(['tpl' => 'select'])?>