view = \Think\Think::instance('Think\View'); $this->addon_path = ADDON_PATH.$this->getName().'/'; $TMPL_PARSE_STRING = C('TMPL_PARSE_STRING'); $TMPL_PARSE_STRING['__ADDONS__'] = APP_PATH . '/Addons/'.$this->getName(); C('TMPL_PARSE_STRING', $TMPL_PARSE_STRING); if(is_file($this->addon_path.'config.php')){ $this->config_file = $this->addon_path.'config.php'; } } final public function getError(){ return $this->_error; } final public function setAdminFunctionList($function_name){ array_push($this->_admin_function_list, $function_name); } final public function getAdminFunctionList(){ return $this->_admin_function_list; } /** * 模板主题设置 * @access protected * @param string $theme 模版主题 * @return Action */ final protected function theme($theme){ $this->view->theme($theme); return $this; } //显示方法 final protected function display($template=''){ if($template == '') $template = CONTROLLER_NAME; echo ($this->fetch($template)); } /** * 模板变量赋值 * @access protected * @param mixed $name 要显示的模板变量 * @param mixed $value 变量的值 * @return Action */ final protected function assign($name,$value='') { $this->view->assign($name,$value); return $this; } //用于显示模板的方法 final protected function fetch($templateFile = CONTROLLER_NAME){ if(!is_file($templateFile)){ $templateFile = $this->addon_path.$templateFile.C('TMPL_TEMPLATE_SUFFIX'); if(!is_file($templateFile)){ throw new \Exception("模板不存在:$templateFile"); } } return $this->view->fetch($templateFile); } final public function getName(){ $class = get_class($this); return substr($class,strrpos($class, '\\')+1, -5); } 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; } final public function createHook($hook_name, $desc){ $hook_ent = D('Hooks')->where(array('name' => $hook_name))->find(); if(!$hook_ent){ $data['name'] = $hook_name; $data['desc'] = $desc; $data['update_date'] = time(); $data['status'] = 1; D('Hooks')->add($data); } } final public function delHook($hook_name){ D('Hooks')->where(array('name' => $hook_name))->delete(); } /** * 获取插件的配置数组 */ final public function getConfig($name=''){ static $_config = array(); if(empty($name)){ $name = $this->getName(); } if(isset($_config[$name])){ return $_config[$name]; } $config = array(); $map['name'] = $name; $map['status'] = 1; $config = M('Addons')->where($map)->getField('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 $sql sql语句 带默认前缀的 * @param string $tablepre 自己的前缀 * @return multitype:string 返回最终需要的sql语句 */ public function sql_split($sql, $tablepre){ if ($tablepre != "onethink_") $sql = str_replace("onethink_", $tablepre, $sql); $sql = preg_replace("/TYPE=(InnoDB|MyISAM|MEMORY)( DEFAULT CHARSET=[^; ]+)?/", "ENGINE=\\1 DEFAULT CHARSET=utf8", $sql); if ($r_tablepre != $s_tablepre) $sql = str_replace($s_tablepre, $r_tablepre, $sql); $sql = str_replace("\r", "\n", $sql); $ret = array(); $num = 0; $queriesarray = explode(";\n", trim($sql)); unset($sql); foreach ($queriesarray as $query) { $ret[$num] = ''; $queries = explode("\n", trim($query)); $queries = array_filter($queries); foreach ($queries as $query) { $str1 = substr($query, 0, 1); if ($str1 != '#' && $str1 != '-') $ret[$num] .= $query; } $num++; } return $ret; } /** * 获取插件所需的钩子是否存在,没有则新增 * @param string $str 钩子名称 * @param string $addons 插件名称 * @param string $addons 插件简介 */ public function getisHook($str, $addons, $msg=''){ $hook_mod = M('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'] = NOW_TIME; $data['addons'] = $addons; if( false !== $hook_mod->create($data) ){ $hook_mod->add(); } } } /** * 删除钩子 * @param string $hook 钩子名称 */ public function deleteHook($hook){ $model = M('hooks'); $condition = array( 'name' => $hook, ); $model->where($condition)->delete(); } //必须实现安装 abstract public function install(); //必须卸载插件方法 abstract public function uninstall(); //abstract public function displayConfig(); }