搜索
系统检测到您的用户名不符合规范:

比onethink更好用的插件机制

浏览:667 发布日期:2015年10月28日 分类:前端开发
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
核心类
<?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;
}
客服,786699892
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
wemallwemall
积分:932 等级:LV2
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /