// +---------------------------------------------------------------------- namespace app\common\controller; /** * 插件类 * @author yangweijie */ class Addons extends Base{ public $info = array(); public $addon_path = ''; public $config_file = ''; public $custom_config = ''; public $admin_list = array(); public $custom_adminlist = ''; public $access_url = array(); public function _initialize(){ $mc = $this->getAddonsName(); $this->addon_path = ROOT_PATH . "/addons/{$mc}/"; if (is_file($this->addon_path.'config.php')) { $this->config_file = $this->addon_path.'config.php'; } } public function template($template){ $mc = $this->getAddonsName(); $ac = input('get.ac','','trim,strtolower'); $parse_str = \think\Config::get('parse_str'); $parse_str['__ADDONROOT__'] = ROOT_PATH . "/addons/{$mc}"; \think\Config::set('parse_str', $parse_str); if ($template) { $template = $template; }else{ $template = $mc . "/" . $ac; } $this->view->engine( array('view_path'=> "addons/" . $mc . "/view/") ); echo $this->fetch($template); } final public function getAddonsName(){ $mc = input('get.mc','','trim,strtolower'); if ($mc) { return $mc; }else{ $class = get_class($this); return strtolower(substr($class,strrpos($class, '\\')+1)); } } final public function checkInfo(){ $info_check_keys = array('name','title','description','status','author','version'); foreach ($info_check_keys as $value) { if(!array_key_exists($value, $this->info)) return false; } return true; } public function getConfig(){ static $_config = array(); if(empty($name)){ $name = $this->getAddonsName(); } if(isset($_config[$name])){ return $_config[$name]; } $config = array(); $map['name'] = $name; $map['status'] = 1; $config = db('Addons')->where($map)->value('config'); if($config){ $config = json_decode($config, true); }else{ $temp_arr = include $this->config_file; foreach ($temp_arr as $key => $value) { if($value['type'] == 'group'){ foreach ($value['options'] as $gkey => $gvalue) { foreach ($gvalue['options'] as $ikey => $ivalue) { $config[$ikey] = $ivalue['value']; } } }else{ $config[$key] = $temp_arr[$key]['value']; } } } $_config[$name] = $config; return $config; } /** * 获取插件所需的钩子是否存在,没有则新增 * @param string $str 钩子名称 * @param string $addons 插件名称 * @param string $addons 插件简介 */ public function getisHook($str, $addons, $msg=''){ $hook_mod = db('Hooks'); $where['name'] = $str; $gethook = $hook_mod->where($where)->find(); if(!$gethook || empty($gethook) || !is_array($gethook)){ $data['name'] = $str; $data['description'] = $msg; $data['type'] = 1; $data['update_time'] = time(); $data['addons'] = $addons; if( false !== $hook_mod->create($data) ){ $hook_mod->add(); } } } /** * 删除钩子 * @param string $hook 钩子名称 */ public function deleteHook($hook){ $model = db('hooks'); $condition = array( 'name' => $hook, ); $model->where($condition)->delete(); } }