完善Typecho插件
在插件挂载中,我们挂载了插件,并编写了rray('NewTest_Action', 'send')
,次类代码,这个就是我们今天要写的,行动代码。
- 首先需要定义一个方法
spend
,在该方法中我们通过系统配置拿到接口调用地址。 - 调用地址,并传入指定参数
有了上面的思路,我们开始正式编写代码
新建Action类
新建一个Action.php
类
class NewTest_Action extends Typecho_Widget implements Widget_Interface_Do
{
public function action()
{
}
}
action类需要继承Typecho_Widget
,并实现Widget_Interface_Do
的接口。
接下来添加spend
方法,百度搜索调用企业微信接口php都是采用CURL,我们用typecho自带的http类使用。
/**
* 准备数据
* @param $contents 文章内容
* @param $class 调用接口的类
* @throws Typecho_Plugin_Exception
*/
public static function send($contents, $class)
{
//如果文章属性为隐藏或滞后发布
if ('publish' != $contents['visibility'] || $contents['created'] > time()) {
return;
}
//获取系统配置
$options = Helper::options();
//判断是否配置好API
if (is_null($options->plugin('NewTest')->api)) {
throw new Typecho_Plugin_Exception(_t('api未配置'));
}
//获取文章类型
$type = $contents['type'];
//获取路由信息
$routeExists = (NULL != Typecho_Router::get($type));
//生成永久连接
$path_info = $routeExists ? Typecho_Router::url($type, $contents) : '#';
$permalink = Typecho_Common::url($path_info, $options->index);
//调用post方法
self::post($permalink);
}
/**
* 发送数据
* @param $url 准备发送的url
* @param $group 分组信息
*/
public static function post($url, $group=null)
{
$options = Helper::options();
//获取API
$api = $options->plugin('NewTest')->api;
//准备数据
if (is_array($url)) {
$urls = $url;
} else {
$urls = array($url);
}
try {
//为了保证成功调用,老高先做了判断
if (false == Typecho_Http_Client::get()) {
throw new Typecho_Plugin_Exception(_t('对不起, 您的主机不支持 php-curl 扩展而且没有打开 allow_url_fopen 功能, 无法正常使用此功能'));
}
$arr = [
'msgtype'=>'text',
'text'=>[
'content'=>'这里是消息内容!',
'mentioned_mobile_list'=>['@all']
]
];
//发送请求
$http = Typecho_Http_Client::get();
$http->setData(json_encode($arr,true));
$http->setHeader('Content-Type', 'application/json'); // 设置相应头
$json = $http->send($api);
} catch (Typecho_Exception $e) {
}
self::logger($log);
}
然后就能去后台编写文章,测试测试了
注意事项
Action是typecho中的一类操作,它对应一条特殊的路由/action/,也就是路由表中的$table[0]['do']
,具体内容如下
[do] => Array
(
[url] => /action/[action:alpha]
[widget] => Widget_Do
[action] => action
[regx] => |^/action/([_0-9a-zA-Z-]+)[/]?$|
[format] => /action/%s
[params] => Array
(
[0] => action
)
)
当我们要添加action对应关系的时候,就可以调用Helper:addAction()
执行添加,系统就会添加一条'new_action' => 'some_action'
。
新增的动作保存在表typecho_options
中的actionTable
中。
需要提醒的是,当我们添加一条action后,需要让其实现类some_action
实现Widget_Interface_Do
的接口,即必须有实现public function action()
,否则调回失败。
同route一样,在卸载插件时不要忘了移除action!
版权属于:Monster_4y
本文链接:https://blog.zmonster.top/118.html
转载时须注明出处及本声明