/** * @param MenuItem $menu * @param array $options * @param int $depth */ protected function prepareItems(MenuItem $menu, array $options = [], $depth = 1) { $menu->setChildrenAttribute('class', 'integrated-website-menu-list'); if (1 === $depth) { $menu->setChildrenAttribute('data-json', json_encode($menu->toArray(false))); } /** @var MenuItem $child */ foreach ($menu->getChildren() as $child) { $child->setAttributes(['class' => 'integrated-website-menu-item', 'data-action' => 'integrated-website-menu-item-edit', 'data-json' => json_encode($child->toArray(false))]); $this->prepareItems($child, $options, $depth + 1); // recursion } if (isset($options['depth']) && $depth <= (int) $options['depth']) { $uuid = $this->generator->generateV5($this->generator->generateV4(), uniqid(rand(), true)); $child = $menu->addChild('+', ['uri' => '#', 'attributes' => ['class' => 'integrated-website-menu-item', 'data-action' => 'integrated-website-menu-item-add']]); $child->setId($uuid); $child->setAttribute('data-json', json_encode($child->toArray(false))); } }