$value) { if (property_exists($obj, $name)) { $obj->$name = $value; } } $result[] = $obj; } return new Collection($result); } /** * Returns a list of registered item types * @return array Returns an array of registered item types */ public function getTypeOptions() { $result = ['url' => 'URL']; $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() { return []; // CMS Pages are loaded client-side } public function getReferenceOptions() { 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 item data to an array * @return array Returns the item data as array */ public function toArray() { $result = []; foreach ($this->fillable as $property) { $result[$property] = $this->$property; } return $result; } }