You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							103 lines
						
					
					
						
							2.3 KiB
						
					
					
				
			
		
		
	
	
							103 lines
						
					
					
						
							2.3 KiB
						
					
					
				| <?php | |
| /** | |
|  * Created by Error202 | |
|  * Date: 09.07.2018 | |
|  */ | |
|  | |
| namespace core\entities\menu; | |
|  | |
| use paulzi\sortable\SortableBehavior; | |
| use yii\db\ActiveRecord; | |
|  | |
| /** | |
|  * Class MenuItem | |
|  * @package core\entities\menu | |
|  * | |
|  * @property integer $id | |
|  * @property integer $menu_id | |
|  * @property integer $parent_id | |
|  * @property string $name | |
|  * @property string $title_attr | |
|  * @property string $target | |
|  * @property string $css | |
|  * @property string $style | |
|  * @property string $module | |
|  * @property string $url | |
|  * @property string $url_params | |
|  * @property integer $sort | |
|  * | |
|  * @property MenuItem $parent | |
|  * @property MenuItem[] $children | |
|  */ | |
|  | |
| class MenuItem extends ActiveRecord | |
| { | |
| 	public static function create($menu_id, $parent_id, $name, $title_attr, $target, $css, $style, $module, $url, $url_params): self | |
| 	{ | |
| 		$menu = new static(); | |
| 		$menu->menu_id = $menu_id; | |
| 		$menu->parent_id = $parent_id; | |
| 		$menu->name = $name; | |
| 		$menu->title_attr = $title_attr; | |
| 		$menu->target = $target; | |
| 		$menu->css = $css; | |
| 		$menu->style = $style; | |
| 		$menu->module = $module; | |
| 		$menu->url = $url; | |
| 		$menu->url_params = $url_params; | |
| 		return $menu; | |
| 	} | |
|  | |
| 	public function edit($menu_id, $parent_id, $name, $title_attr, $target, $css, $style, $module, $url, $url_params): void | |
| 	{ | |
| 		$this->menu_id = $menu_id; | |
| 		$this->parent_id = $parent_id; | |
| 		$this->name = $name; | |
| 		$this->title_attr = $title_attr; | |
| 		$this->target = $target; | |
| 		$this->css = $css; | |
| 		$this->style = $style; | |
| 		$this->module = $module; | |
| 		$this->url = $url; | |
| 		$this->url_params = $url_params; | |
| 	} | |
|  | |
| 	public static function tableName(): string | |
| 	{ | |
| 		return '{{%menu_items}}'; | |
| 	} | |
|  | |
| 	/*public function behaviors() | |
| 	{ | |
| 		return [ | |
| 			[ | |
| 				'class' => SortableBehavior::class, | |
| 				'query' => ['menu_id'], | |
| 			], | |
| 		]; | |
| 	}*/ | |
|  | |
| 	public function beforeSave( $insert ) { | |
| 		if (parent::beforeSave($insert)) { | |
| 			if (!isset($this->sort)) { | |
| 				$count = MenuItem::find() | |
| 		                      ->andWhere( [ 'menu_id' => $this->menu_id ] ) | |
| 		                      ->andWhere( [ 'parent_id' => $this->parent_id ] ) | |
| 		                      ->count(); | |
| 				$this->sort = $count; | |
| 			} | |
| 			return true; | |
| 		} | |
| 		return false; | |
| 	} | |
|  | |
| 	public function getChildren() | |
| 	{ | |
| 		return $this->hasMany(MenuItem::class, ['parent_id' => 'id'])->orderBy(['sort' => SORT_ASC]); | |
| 	} | |
|  | |
| 	public function getParent() | |
| 	{ | |
| 		return $this->hasOne(MenuItem::class, ['id' => 'parent_id']); | |
| 	} | |
| } |