💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
###3.11插件开发指南 --- 一、插件类型介绍 CSW插件目前分为“内置控制器”、“页面嵌入”。 1、内置控制器类型插件。 有独立的控制器、模型、视图目录,后面将重点介绍该类型插件开发。 2、页面嵌入类型插件。 该类型插件只包含两个核心文件:run.php和run.html。 二、“内置控制器”插件开发介绍 1、插件文件及目录结构 目录controllers: 插件控制器目录 目录models: 插件模型目录 目录views: 插件视图目录 文件config.php: 插件配置信息文件 文件install.php: 安装插件执行的SQL语句 文件uninstall.php:删除插件执行的SQL语句 文件md5.php: MD5校验文件,官方校验文件 文件mark.txt: 官方发布插件的唯一标示,若是自己开发的插件就不需要该文件 2、插件访问路径 网站地址/index.php?s=插件名称&c=插件控制器&a=对应的Action。 3、插件配置文件config.php规则 <?php return array( 'name' => '文章踩顶', 'author' => 'start', 'version' => '1.0', 'typeid' => 1, 'description' => "必须有Jquery支持,将下面代码放在内容页面中", 'fields' => array( array('field'=>'dingname', 'name'=>'“顶”名称设置', 'tips'=>'默认“顶一下”。', 'formtype'=>'input', 'setting'=>"array('size'=>'100')"), array('field'=>'cainame', 'name'=>'“踩”名称设置', 'tips'=>'默认“踩一下”。', 'formtype'=>'input', 'setting'=>"array('size'=>'100')"), ) ); 该配置文件返回数组格式信息,参数如下介绍。 name: 插件名称。 author: 插件作者。 version: 插件版本。 typeid: 1,(固定格式值)。 description: 插件描述信息(注意html转义)。 fields: 插件配置参数(若没有配置信息设置,该值可省略)。 array('field'=>'字段名称', 'name'=>'字段显示名称', 'tips'=>'提醒文字', 'formtype'=>'字段类型(可参考扩展目录的fields.php文件)', 'setting'=>"该字段类型的配置信息"), 4、插件安装/卸载文件规则 (1)、安装文件install.php <?php if (!defined('IN_FINECMS')) exit(''); return array( "DROP TABLE IF EXISTS `{prefix}digg`;", "CREATE TABLE IF NOT EXISTS `{prefix}digg` ( `id` mediumint(8) NOT NULL AUTO_INCREMENT, `contentid` mediumint(8) NOT NULL, `title` varchar(100) NOT NULL, `cai` mediumint(8) NOT NULL, `ding` mediumint(8) NOT NULL, `addtime` int(10) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;" ); 支持多条SQL语句,数据表前缀请用“{prefix}”表示。 (2)插件卸载uninstall.php <?php if (!defined('IN_FINECMS')) exit(''); return array( "DROP TABLE IF EXISTS `{prefix}digg`;" ); 5、插件控制器controllers规则 (1)、插件公共控制器类Common.php。 <?php /** * 插件控制器公共类 */ class Plugin extends Common { //继承通用公共类 protected $plugin; //插件模型 protected $data; //插件数据 protected $viewpath; //视图目录 protected $digg; //用到的插件模型实例 public function __construct() { parent::__construct(); $this->plugin = $this->model('plugin'); $this->data = $this->plugin->where('dir=?', $this->namespace)->select(false); if (empty($this->data)) $this->adminMsg('插件尚未安装', url('admin/plugin')); if ($this->data['disable']) $this->adminMsg('插件尚未开启', url('admin/plugin')); $this->viewpath = SITE_PATH . $this->site['PLUGIN_DIR'] . '/' . $this->data['dir'] . '/views/'; $this->assign(array( 'viewpath' => $this->viewpath, 'pluginid' => $this->data['pluginid'], )); //以上代码为固定格式,用户在开发插件时,可以直接copy。 $this->digg = $this->model('digg'); //实例化用到的模型 } } 插件控制器公共类用于实例化该插件用到的模型,或者该插件用到的函数等。 (2)、控制器Controller介绍 <?php class AdminController extends Plugin { //AdminController继承公共插件类 public function __construct() { parent::__construct(); //Admin控制器进行登录验证 if (!$this->session->is_set('user_id') || !$this->session->get('user_id')) $this->adminMsg('请登录以后再操作', url('admin/login')); //如果需要管理员登陆验证,就加上这一句。 } public function indexAction() { echo "插件indexAction,欢迎使用FineCMS插件。"; } } 加载视图文件和赋值变量与主控制器不同以外,其他规则与Controller一致。 变量赋值:$this->assign(变量名称, 变量值); $this->assign(支持数组); 加载视图:$this->display(视图文件名称(不带扩展名));例如:$htis->display('test');//插件目录/views/test.php (3)、插件模型models介绍 与系统模型规则一致。 (4)、插件视图views介绍 只支持原生态PHP语句,不支持模板标签。