| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 | <?php/** * FecShop file. * * @link http://www.fecshop.com/ * @copyright Copyright (c) 2016 FecShop Software LLC * @license http://www.fecshop.com/license/ */namespace fecadmin\models;use Yii;use yii\db\ActiveRecord;use fec\helpers\CUrl;/** * @author Terry Zhao <2358269014@qq.com> * @since 1.0 */class AdminMenu extends ActiveRecord{    private $_admin_menu;	private $_admin_menu_tree_arr;	public  $_ajaxMenuEditUrl;	private $_active_menu_ids;		    public static function tableName()    {        return '{{%admin_menu}}';    }		public function rules()    {		$current_rules = [			[['name', 'parent_id','url_key',], 'required'],			['sort_order','validateSortOrder'],		];		return $current_rules;    }		public function validateSortOrder($attribute,$params){		if($order = $this->sort_order){			if(!is_numeric($order)){				$this->addError($attribute,"sort_order must be numeric");			}		}	}			public function getAdminMenu(){		if($this->_admin_menu === null ){			$this->_admin_menu = new self;		}		return $this->_admin_menu;	}				public function getActiveMenuIds(){		if($this->_active_menu_ids === null){			$user = Yii::$app->user->identity;			$user_id = $user['id'];			$roles = AdminUserRole::find()->asArray()->where([				'user_id' => $user_id			])->all();			$role_ids = [];			if(!empty($roles)){				foreach($roles as $one){					$role_ids[] = $one['role_id'];				}			}			//var_dump($user);exit;			$menu_ids = [];			if(!empty($role_ids)){								$AdminRoleMenus = AdminRoleMenu::find()						->asArray()						->select(['menu_id'])						->where(['in','role_id',$role_ids])						->all();				if(!empty($AdminRoleMenus)){					foreach($AdminRoleMenus as $menu){						$menu_ids[] = $menu['menu_id'];					}				}							}			$menu_ids = array_unique($menu_ids);			$this->_active_menu_ids = $menu_ids;		}		return $this->_active_menu_ids;			}			# 得到后台显示菜单(左侧)	public function getLeftMenuTreeHtml($treeArr='',$i=1){		$active_menu_ids = $this->getActiveMenuIds();		$str = '';		if(!$treeArr){			$treeArr = $this->getMenuTreeArray();		}		foreach($treeArr as $node){			$name = $node["name"];			$id = $node["id"];			if(!in_array($id,$active_menu_ids)){				continue;			}			$url_key = $node["url_key"];			if($i == 1){				$str .=	'<div class="accordionHeader">							<h2><span>Folder</span>'.$name .'</h2>						</div>						<div class="accordionContent">';				if($this->hasChild($node)){					$str .='<ul class="tree treeFolder">';					$str .= $this->getLeftMenuTreeHtml($node['child'],$i+1);					$str .='</ul>';				}					$str .=	'</div>';			}else{				if($this->hasChild($node)){					//$str .=		'<li><a href="'.CUrl::getUrl($url_key).'" target="navTab" rel="page1">'.$name.'</a>';					$str .=		'<li><a href="javascript:void(0)" >'.$name.'</a>';					$str .=			'<ul>';						$str .= $this->getLeftMenuTreeHtml($node['child'],$i+1);					$str .=			'</ul>';										$str .=		'</li>';				}else{					$str .='<li><a href="'.CUrl::getUrl($url_key).'" target="navTab" rel="page1">'.$name.'</a></li>';				}			}		}		return $str;	}			public function getRoloEditMenuTreeHtml($selected_menu_ids,$treeArr=''){		$str ='';				if(!$treeArr){			$treeArr = $this->getMenuTreeArray();		}		foreach($treeArr as $node){			$name = $node["name"];			$id = $node["id"];			$url_key = $node["url_key"];			if($this->hasChild($node)){				$str .= '<li><a  '.( in_array($id,$selected_menu_ids) ?  'checked="true"' : '').' tvalue="'.$id.'" tname="name">'.$name.'</a>';				$str .= '<ul>';				$str .= $this->getRoloEditMenuTreeHtml($selected_menu_ids,$node['child']);				$str .= '</ul>';				$str .= '</li>';					}else{				$str .= '<li><a  '.( in_array($id,$selected_menu_ids) ?  'checked="true"' : '').' tvalue="'.$id.'" tname="name">'.$name.'</a></li>';			}		}		return $str;			}				# 得到menu的html	public function getEditMenuTreeHtml($treeArr=''){		$str ='';		//$str = '<ul class="tree treeFolder">';				if(!$treeArr){			$treeArr = $this->getMenuTreeArray();		}		foreach($treeArr as $node){			$name = $node["name"];			$id = $node["id"];			$url_key = $node["url_key"];			if($this->hasChild($node)){				$str .= '<li><a href="'.$this->_ajaxMenuEditUrl.'?id='.$id.'"  target="ajax" rel="jbsxBox">'.$name.'</a>';				$str .= '<ul>';				$str .= $this->getEditMenuTreeHtml($node['child']);				$str .= '</ul>';				$str .= '</li>';			}else{				$url = CUrl::getUrl($url_key);				$str .= '<li><a href="'.$this->_ajaxMenuEditUrl.'?id='.$id.'" target="ajax" rel="jbsxBox">'.$name.'</a></li>';			}		}				//$str .= '</ul>';		return $str;			}		public function hasChild($node){		if(isset($node['child']) && !empty($node['child'])){			return true;		}		return false;	}			# 得到tree的数组	public function getMenuTreeArray(){		$menu_tree_array = $this->getMenuTree();		return $menu_tree_array;	}				public function getMenuTree($parent_id = 0){		$menuArr = [];		$parentArr = AdminMenu::find()->asArray()				->where(['parent_id' => $parent_id])				->orderBy(['sort_order' => SORT_DESC])				->all();		if(is_array($parentArr) && !empty($parentArr)){			foreach($parentArr as $node){				$name = $node["name"];				$id = $node["id"];				$url_key = $node["url_key"];				$menuArr[$id] = [					'id' 		=> $id,					'name' 		=> $name,					'url_key' 	=> $url_key,				];				$menuArr[$id]['child'] = $this->getMenuTree($id);			}		}		return $menuArr;	}		}
 |