CMS发布插件开发

使用“后台»工具&开发»开发»CMS发布插件”可快速生成插件

开发cms发布插件

我们用个示例来演示如何制作插件,首先确定我们的需求:将采集的文章发布到wordpress程序里

输入插件名称:wordpress文章入库,CMS程序选择wordpress,插件功能标识:article(表示文章入库),作者版权填你自己的

开发cms发布插件-示例

然后添加参数,什么是参数呢?参数在界面中是可视化的控件,可绑定或输入数据,方便用户操作

输入变量名供代码中调用该参数的值,必填可过滤空值,参数名称供用户界面操作,参数类型生成相应控件

开发cms发布插件-添加参数

参数类型:

  • 数字(number)、字符(text)、开关(radio)、文本(textarea) 会转换成界面相应的html元素
  • “选择采集字段(select)”会将采集器中的字段生成select选项元素
  • “选择固定值(select)”并输入选项值会将预设的值生成select选项元素
  • “选择函数返回值(select)”并输入函数名会将函数返回的数组生成select选项元素

开发cms发布插件-参数列表

配置完毕点击“保存”将在根目录/plugin/release/cms中生成相应的插件文件

CMS界面操作

编辑任务的“发布设置”,发布方式选择“本地cms程序”,如果有wordpress程序会自动检测出(没有可手动绑定),在“CMS插件”中就可以看到刚才添加的插件

开发cms发布插件-绑定数据

大家可以看到,文章标题、文章内容是“选择采集字段(select)”类型,如果采集器中有字段,这里就会自动显示出来

而作者账号、分类是“选择函数返回值(select)”类型,这里没有值是因为函数方法中没有返回数据库中的数据

编辑插件文件,找到“作者账号”函数(你自己设置的函数名),编写代码读取数据库中的账号并返回键值对数组

public function param_option_author(){
	$usersDb=$this->db()->table('__USERS__')->limit(100)->select();
	$userList=array();
	foreach ($usersDb as $user){
		$userList[$user['user_login']]=$user['user_login'];
	}
	return $userList;
}

分类同理

public function param_option_category(){
	$catsDb=$this->db()->table('__TERMS__')->select();
	$catList=array();
	foreach ($catsDb as $cat){
		$catList[$cat['term_id']]=$cat['name'];
	}
	return $catList;
}

代码中无需设置cms的数据库配置,只需$this->db()即可自动调用cms数据库对象,表名也无需加入前缀,使用__表名大写__可自动生成完整表名,数据库操作可参考thinkphp5

注意:并不是支持所有cms程序,只预设了几个流行的程序,如未检测出程序且数据绑定也无效的情况下,数据库配置需要您自行在插件中加入代码:

//CMS全称必须与你插件的cms程序名一致,$cmsPath为cms的根目录路径
public function cms_db_CMS全称($cmsPath){
	//请读取cms的配置文件并将数据库保存为以下数组形式后返回,可参考BaseCms.php中的其它cms_db_方法
	$cmsDb=array(
		'db_type'  => 'mysql',//数据库类型
		'db_user'  => '',//用户
		'db_pwd'   => '',//密码
		'db_host'  => '',//数据库主机
		'db_port'  => 3306,//端口
		'db_name'  => '',//数据库名称
		'db_charset'  => 'utf8',//数据库编码
		'db_prefix'  => '',//表前缀
	);
	return $cmsDb;
}

发布数据到CMS程序

以上配置都完成后接下来就是入库工作,找到或添加方法:runImport

/*
 * 导入数据
 * 必须以数组形式返回:
 * id(必填)表示入库返回的自增id或状态
 * target(可选)记录入库的数据位置(发布的网址等)
 * desc(可选)记录入库的数据位置附加信息
 * error(可选)记录入库失败的错误信息
 * 入库的信息可在“已采集数据”中查看
 * return array('id'=>0,'target'=>'','desc'=>'','error'=>'');
 */
 public function runImport($params){
 	print_r($params);die();
	return array('id'=>0,'target'=>'','desc'=>'','error'=>'');
 }

$params数组即参数值列表,打印出来可发现,键名就是参数的变量名,值是最终处理后的结果,直接调用$params[变量名]便可得到参数的值

runImport方法必须返回数组,可以做网址排重、数据记录等作用

以上示例已经上传至云平台,您可参考该示例开发出属于您自己的插件

常见问题

乱码:使用 $this->auto_convert2utf8($str) 自动转换成utf-8编码

检测不出CMS:请手动绑定,输入cms路径并在路径结尾加上@CMS程序名,例如:@discuz