$value) { if ($name != 'items') { if (property_exists($obj, $name)) { $obj->$name = $value; } } else { $obj->items = self::initFromArray($value); } } $result[] = $obj; } return $result; } /** * Returns a list of registered menu item types * @return array Returns an array of registered item types */ public function getTypeOptions($keyValue = null) { /* * Baked in types */ $result = [ 'url' => 'URL', 'header' => 'Header', ]; $apiResult = Event::fire('pages.menuitem.listTypes'); if (is_array($apiResult)) { foreach ($apiResult as $typeList) { if (!is_array($typeList)) { continue; } foreach ($typeList as $typeCode => $typeName) { $result[$typeCode] = $typeName; } } } return $result; } public function getCmsPageOptions($keyValue = null) { return []; // CMS Pages are loaded client-side } public function getReferenceOptions($keyValue = null) { return []; // References are loaded client-side } public static function getTypeInfo($type) { $result = []; $apiResult = Event::fire('pages.menuitem.getTypeInfo', [$type]); if (is_array($apiResult)) { foreach ($apiResult as $typeInfo) { if (!is_array($typeInfo)) { continue; } foreach ($typeInfo as $name => $value) { if ($name == 'cmsPages') { $cmsPages = []; foreach ($value as $page) { $baseName = $page->getBaseFileName(); $pos = strrpos($baseName, '/'); $dir = $pos !== false ? substr($baseName, 0, $pos).' / ' : null; $cmsPages[$baseName] = strlen($page->title) ? $dir.$page->title : $baseName; } $value = $cmsPages; } $result[$name] = $value; } } } return $result; } /** * Converts the menu item data to an array * @return array Returns the menu item data as array */ public function toArray() { $result = []; foreach ($this->fillable as $property) { $result[$property] = $this->$property; } return $result; } }