typecho插件编写教程(五):核心代码


Posted in PHP onMay 28, 2015

之前??铝撕芏啵?衷诳?夹春诵拇?搿?/p>

分析一下,发布文章的时候,我们需要的信息就是当前文章的URL,我们需要想办法从$contents、 $class中拿到他。

目前我们的插件类代码如下(请注意render被我改成了send)

class BaiduSubmitTest_Plugin implements Typecho_Plugin_Interface

{
    public static function activate(){

        //挂载发布文章和页面的接口

        Typecho_Plugin::factory('Widget_Contents_Post_Edit')->finishPublish = array('BaiduSubmitTest_Plugin', 'send');

        Typecho_Plugin::factory('Widget_Contents_Page_Edit')->finishPublish = array('BaiduSubmitTest_Plugin', 'send');

        return '插件安装成功,请进入设置填写准入密钥';

    }
    public static function deactivate(){

        // do something

        return '插件卸载成功';

    }
    public static function config(Typecho_Widget_Helper_Form $form){

        $element = new Typecho_Widget_Helper_Form_Element_Text('api', null, null, _t('准入秘钥'), '请登录百度站长平台获取');

        $form->addInput($element);

    }
    public static function personalConfig(Typecho_Widget_Helper_Form $form){}
    public static function send($contents, $class){

        //do something

    }

}

获取URL

获取永久链接需要通过路由规则 + Typecho_Common::url 联合生成!

class BaiduSubmitTest_Plugin implements Typecho_Plugin_Interface

{
    public static function activate(){

        //挂载发布文章和页面的接口

        Typecho_Plugin::factory('Widget_Contents_Post_Edit')->finishPublish = array('BaiduSubmitTest_Plugin', 'send');

        Typecho_Plugin::factory('Widget_Contents_Page_Edit')->finishPublish = array('BaiduSubmitTest_Plugin', 'send');

        return '插件安装成功,请进入设置填写准入密钥';

    }
    public static function deactivate(){

        // do something

        return '插件卸载成功';

    }
    public static function config(Typecho_Widget_Helper_Form $form){

        //保存接口调用地址

        $element = new Typecho_Widget_Helper_Form_Element_Text('api', null, null, _t('接口调用地址'), '请登录百度站长平台获取');

        $form->addInput($element);

    }
    public static function personalConfig(Typecho_Widget_Helper_Form $form){}
    /**

     * 准备数据

     * @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('BaiduSubmitTest')->api) ){

            return;

        }
        //获取文章类型

        $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);

    }

}

代码中有注释,老高就不在赘述了。

至此我们已经拿到了文章的永久链接,下一步就是给百度服务器发送数据了!

本节完!

PHP 相关文章推荐
微盾PHP脚本加密专家php解密算法
Sep 13 PHP
php发送post请求的三种方法
Feb 11 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
May 12 PHP
Laravel 5.0 发布 新版本特性详解
Feb 10 PHP
PHP中把数据库查询结果输出为json格式简单实例
Apr 09 PHP
php采用session实现防止页面重复刷新
Dec 24 PHP
PHP错误和异常处理功能模块示例
Nov 12 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 PHP
PHP CURL中传递cookie的方法步骤
May 09 PHP
Yii框架响应组件用法实例分析
Sep 04 PHP
php解决安全问题的方法实例
Sep 19 PHP
php实现paypal 授权登录
May 28 #PHP
typecho插件编写教程(四):插件挂载
May 28 #PHP
PHP Opcache安装和配置方法介绍
May 28 #PHP
typecho插件编写教程(三):保存配置
May 28 #PHP
PHP通过API获取手机号码归属地
May 28 #PHP
typecho插件编写教程(二):写一个新插件
May 28 #PHP
typecho插件编写教程(一):Hello World
May 28 #PHP
You might like
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
php实现的ping端口函数实例
2014/11/12 PHP
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
2011/03/12 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
基于JavaScript实现文字超出部分隐藏
2016/02/29 Javascript
jQuery动态创建元素以及追加节点的实现方法
2016/10/20 Javascript
js实现交通灯效果
2017/01/13 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
解决canvas画布使用fillRect()时高度出现双倍效果的问题
2017/08/03 Javascript
vue内置指令详解
2018/04/03 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
2018/09/15 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
2018/11/25 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
react MPA 多页配置详解
2019/10/18 Javascript
js实现3D照片墙效果
2019/10/28 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
python转换摩斯密码示例
2014/02/16 Python
Python函数嵌套实例
2014/09/23 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
浅谈PYTHON 关于文件的操作
2019/03/19 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
HTML5里的placeholder属性使用实例和美化显示效果的方法
2014/04/23 HTML / CSS
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
介绍一下Python下range()函数的用法
2013/11/07 面试题
会计专业应届生自荐信
2014/02/07 职场文书
2019秋季运动会口号
2019/06/25 职场文书
Vue和Flask通信的实现
2021/05/19 Vue.js
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android