自主开发的thinkphp插件机制,比onethink方便移植,升级和二次开发。 1. [代码] [PHP]代码 核心类?php// +----------------------------------------------------------------------// | Thinkphp [ WE CAN DO IT JUST THINK
1. [代码][PHP]代码
核心类 <?php // +---------------------------------------------------------------------- // | Thinkphp [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------------- // | Copyright (c) 2015 http://www.inuoer.com All rights reserved. // +---------------------------------------------------------------------- // | Author: better <einsqing@gmail.com> // +---------------------------------------------------------------------- namespace Common\Controller; use Think\Controller; /** * 插件类 * @author better <einsqing@gmail.com> */ abstract class Addon extends Controller { /** * 视图实例对象 * @var view * @access protected */ protected $view = null; public $addon_path = ''; public $config_file = ''; public $view_path = ''; public function __construct() { $this->view = \Think\Think::instance('Think\View'); $this->addon_path = ADDON_PATH . '/' . $this->getName() . '/'; //重置视图配置 C('DEFAULT_THEME', ''); C('VIEW_PATH', ''); if (is_file($this->addon_path . 'Conf/config.php')) { $this->config_file = $this->addon_path . 'Conf/config.php'; $config = require $this->config_file; C($config); } $this->view_path = __ROOT__ . '/' . ADDON_PATH . '/' . $this->getName() . '/'; C("TMPL_PARSE_STRING", array( '__IMG__' => $this->view_path . 'View' . C("DEFAULT_THEME") . '/Public/image', '__CSS__' => $this->view_path . 'View' . C("DEFAULT_THEME") . '/Public/css', '__JS__' => $this->view_path . 'View' . C("DEFAULT_THEME") . '/Public/js', '__ADDON_PUBLIC__' => $this->view_path . 'View' . C("DEFAULT_THEME") . '/Public', )); } /** * 模板主题设置 * @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; $action = ACTION_NAME; echo($this->fetch($template, $action)); } /** * 模板变量赋值 * @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, $action = ACTION_NAME) { if (!is_file($templateFile)) { if (C('VIEW_PATH')) { $templateFile = C('VIEW_PATH') . C('DEFAULT_THEME') . '/' . $templateFile . '/' . $action . C('TMPL_TEMPLATE_SUFFIX'); } else { $templateFile = $this->addon_path . 'View/' . C('DEFAULT_THEME') . '/' . $templateFile . '/' . $action . 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); $str = explode('\\', $class); return $str[1]; } //必须实现安装 abstract public function install(); //必须卸载插件方法 abstract public function uninstall(); } 核心方法 /** * 执行SQL文件 */ function execute_sql_file($sql_path) { // 读取SQL文件 $sql = wp_file_get_contents($sql_path); $sql = str_replace("\r", "\n", $sql); $sql = explode(";\n", $sql); // 替换表前缀 $orginal = 'wp_'; $prefix = C('DB_PREFIX'); $sql = str_replace("{$orginal}", "{$prefix}", $sql); // 开始安装 foreach ($sql as $value) { $value = trim($value); if (empty ($value)) continue; $res = M()->execute($value); // dump($res); // dump(M()->getLastSql()); } } // 防超时的file_get_contents改造函数 function wp_file_get_contents($url) { $context = stream_context_create(array( 'http' => array( 'timeout' => 30 ) )); // 超时时间,单位为秒 return file_get_contents($url, 0, $context); } /** * 插件显示内容里生成访问插件的url * @param string $url url * @param array $param 参数 * @author better * @useage u_addons('apply://App/Index/addorder',array('id'=>'1')) */ function u_addons($url, $param = array()){ $url = explode('://', $url); $addon = $url[0]; $url = $url[1]; $url = U($url, $param, false); return $url . '/addon/' . $addon; }