parent_id = $form_model->getItem('parent_id') ?? 0; $model->icon_file = $form_model->getItem('icon_file'); $model->icon_font = $form_model->getItem('icon_font'); $model->label = $form_model->getItem('label'); $model->url = $form_model->getItem('url'); $model->status = $form_model->getItem('status') ?? 1; $model->slug = $form_model->getItem('slug'); $model->priority = $form_model->getItem('priority') ?? 5; if ($model->save()){ return $model; } return false; } /** * @throws Exception */ public function createItem(array $item): false|Menu { $model = new CreateMenuForm(); $model->load($item); if (!$model->validate()){ throw new Exception('Ошибка создания пункта меню'); } if ($model->getItem("parent_slug")){ $parent = $this->getBySlug($model->getItem("parent_slug")); if ($parent){ $model->setItem("parent_id", $parent->id); } else { $model->setItem("parent_id", 0); } } return $this->create($model); } public function removeItemBySlug(string $slug) { return Menu::where("slug", $slug)->delete(); } public function getBySlug(string $slug) { return Menu::where("slug", $slug)->first(); } public function update(FormModel $form_model, Menu $menuItem): false|Menu { $menuItem->parent_id = $form_model->getItem('parent_id'); $menuItem->icon_file = $form_model->getItem('icon_file'); $menuItem->icon_font = $form_model->getItem('icon_font'); $menuItem->label = $form_model->getItem('label'); $menuItem->url = $form_model->getItem('url'); $menuItem->status = $form_model->getItem('status'); $menuItem->slug = $form_model->getItem('slug'); $menuItem->priority = $form_model->getItem('priority') ?? 5; if ($menuItem->save()){ return $menuItem; } return false; } public static function createLabelArr(): array { $labelArr[0] = "Корневой пункт меню"; foreach (Menu::where("parent_id", 0)->get()->toArray() as $menuItem) { $labelArr[$menuItem['id']] = $menuItem['label']; } if (!empty($labelArr)) { return $labelArr; } return []; } public static function getChild(int $id) { $collection = Menu::where("parent_id", $id)->get()->sortBy('priority'); if (!$collection->isEmpty()){ return $collection; } return false; } public static function hasActiveChild(int $id): bool { $child = self::getChild($id); if (!$child->isEmpty()){ foreach ($child as $item){ // if ($item->url === \kernel\Request::getUrlPath()){ // return true; // } if (strripos(Request::getUrlPath(), $item->url) !== false) { return true; } } } return false; } public static function isActive($url): bool { if ($url === Request::getUrlPath()){ return true; } else { if (strripos(\kernel\Request::getUrlPath(), ($url . "/page")) !== false) { return true; } } return false; } }