You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

150 lines
4.6 KiB
PHTML

2 years ago
<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: yangweijie <yangweijiester@gmail.com> <code-tech.diandian.com>
// +----------------------------------------------------------------------
namespace Common\Controller;
/**
* 插件类
* @author yangweijie <yangweijiester@gmail.com>
*/
abstract class Addon{
/**
* 视图实例对象
* @var view
* @access protected
*/
protected $view = null;
/**
* $info = array(
* 'name'=>'Editor',
* 'title'=>'编辑器',
* 'description'=>'用于增强整站长文本的输入和显示',
* 'status'=>1,
* 'author'=>'thinkphp',
* 'version'=>'0.1'
* )
*/
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 __construct(){
$this->view = \Think\Think::instance('Think\View');
$this->addon_path = ONETHINK_ADDON_PATH.$this->getName().'/';
$TMPL_PARSE_STRING = C('TMPL_PARSE_STRING');
$TMPL_PARSE_STRING['__ADDONROOT__'] = __ROOT__ . '/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';
}
}
/**
* 模板主题设置
* @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 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;
}
//必须实现安装
abstract public function install();
//必须卸载插件方法
abstract public function uninstall();
}