首页 > php教程 > php手册 > 正文

比onethink更好用的插件机制

php中文网
发布: 2016-06-07 11:37:32
原创
1280人浏览过

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

AD:真正免费,域名+虚机+企业邮箱=0元

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号