开发cms发布插件
CMS发布插件开发
使用“后台»工具&开发»开发»CMS发布插件”可快速生成插件
我们用个示例来演示如何制作插件,首先确定我们的需求:将采集的文章发布到wordpress程序里
输入插件名称:wordpress文章入库,CMS程序选择wordpress,插件功能标识:article(表示文章入库),作者版权填你自己的
然后添加参数,什么是参数呢?参数在界面中是可视化的控件,可绑定或输入数据,方便用户操作
输入变量名供代码中调用该参数的值,必填可过滤空值,参数名称供用户界面操作,参数类型生成相应控件
参数类型:
- 数字(number)、字符(text)、开关(radio)、文本(textarea) 会转换成界面相应的html元素
- “选择采集字段(select)”会将采集器中的字段生成select选项元素
- “选择固定值(select)”并输入选项值会将预设的值生成select选项元素
- “选择函数返回值(select)”并输入函数名会将函数返回的数组生成select选项元素
配置完毕点击“保存”将在根目录/plugin/release/cms中生成相应的插件文件
CMS界面操作
编辑任务的“发布设置”,发布方式选择“本地cms程序”,如果有wordpress程序会自动检测出(没有可手动绑定),在“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方法必须返回数组,可以做网址排重、数据记录等作用
以上示例已经上传至云平台,您可参考该示例开发出属于您自己的插件
常见问题
乱码:使用 auto_convert2utf8($str) 自动转换成utf-8编码
检测不出CMS:请手动绑定,输入cms路径并在路径结尾加上@CMS程序名,例如:@discuz